Container View Controllers - notify parent of action

前端 未结 3 1790
北荒
北荒 2020-12-28 11:24

Say I have a custom container view controller (MainViewController) where I do something like this:

- (void)viewDidLoad
{
    [super viewDidLoad];        

           


        
3条回答
  •  长情又很酷
    2020-12-28 12:06

    You can either use delegate or block;

    Using delegate

    Create a protocol :

    @protocol SomeProtocol 
    - (void)someAction; 
    @end 
    

    Just declare a delegate in HomeViewController.h like this:

    id delegate; 
    

    and then in MainViewController's viewDidLoad set it like this:

    homeVC.delegate = self;
    //some where in MainViewController implement the protocol method
    -(void)someAction
    {
        //do something
    }
    

    then when you press the button in homeVC, just simply call:

    if ([self.delegate respondsToSelector:@selector(someAction)]) {
        [self.delegate someAction];
    }
    

    Using Block:

    In HomeViewController.h declare a block property:

    typedef void (^ActionBlock)();
    
    @property (nonatomic, copy) ActionBlock block;
    

    then in MainViewController ViewDidLoad:

    homeVC.block = ^(){
        //do something
    };
    

    then when you press the button in homeVC, just simply call:

    self.block();
    

提交回复
热议问题