Search code examples
iosdelegatestouch-eventcustom-view

iOS - Custom view with touch event


I'm trying to creating a custom UIView, lets call it FooView.

FooView.h

#import <UIKit/UIKit.h>

@interface FooView : UIView

@property (nonatomic, strong) UITextField *barTextField;
@property (nonatomic, strong) UIButton *submitButton;

@end

FooView.m

#import "FooView.h"

@implementation FooView

@synthesize barTextField = _barTextField;
@synthesize submitButton = _submitButton;

...

@end

FooViewController.h

#import <UIKit/UIKit.h>
#import "FooView.h"

@interface FooViewController : UIViewController

@property (nonatomic, strong) FooView *fooView;

@end

FooViewController.m

#import "SearchViewController.h"

@interface SearchViewController ()
@end

@implementation SearchViewController
@synthesize fooView = _fooView;

@end

I want the button touch event to be implemented in FooViewController, is delegate can achieve this? If YES, how?

Currently, I'm adding the touch event in such a way

FooViewController.m

- (void)viewDidLoad
{
    [self.fooView.submitButton addTarget:self action:@selector(submitTapped:) forControlEvents:UIControlEventTouchUpInside];
}

...
- (IBAction)submitTapped
{
    ...
}

But I don't think this is a good solution, so need some expert advice.

Any idea?


Solution

  • Yes you can implement using delegate

    FooView.h

    #import <UIKit/UIKit.h>
    
    @protocol FooViewDelegate
        -(void)submitButtonClicked:(id)sender;
    @end
    
    @interface FooView : UIView
    
    @property (nonatomic, strong) UITextField *barTextField;
    @property (nonatomic, strong) UIButton *submitButton;
    @property (nonatomic, assign) id<FooViewDelegate> delegate;
    
    @end
    

    FooView.m

    #import "FooView.h"
    
    @implementation FooView
    
    @synthesize barTextField = _barTextField;
    @synthesize submitButton = _submitButton;
    @synthesize delegate;
    ...
    
    -(IBAction)buttonClicked:(id)sender // connect this method with your button
    {
        [self.delegate submitButtonClicked:sender];
    }
    
    @end
    

    FooViewController.h

    #import <UIKit/UIKit.h>
    #import "FooView.h"
    
    @interface FooViewController : UIViewController <FooViewDelegate>
    
    @property (nonatomic, strong) FooView *fooView;
    
    @end
    

    FooViewController.m

    #import "FooViewController.h"
    
    @interface FooViewController ()
    @end
    
    @implementation FooViewController
    @synthesize fooView = _fooView;
    
    - (void)viewDidLoad
    {
        _fooView = [[UIView alloc] init];
        _fooView.delegate = self;
    }
    
    -(void)submitButtonClicked:(id)sender //delegate method implementation
    {
        NSLog(@"%@",[sender tag]);
    }
    
    @end