Cocoa设计模式之委托

protocol-协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。 

delegate-委托,顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。

当一个A view 里面包含了B view,b view需要修改a view界面,那么这个时候就需要用到委托了。

需要几个步骤

1,首先定一个协议

2,a view实现协议中的方法

3,b view设置一个委托变量

4,把b view的委托变量设置成a view,意思就是 ,b view委托a view办事情。

5,事件发生后,用委托变量调用a view中的协议方法

下面分步说明:

1,首先定义一个协议

@protocol PlayerDetailDelegate <NSObject>
-(void) updatePlayer:(Player *)player;
@end

这是一种正式定义协议的方法,还有一种叫做非正式协议,其实质就是Category,对已有的类的方法进行扩展。

2、a view实现协议中的方法

首先是在头文件中加入实现协议

@interface PlayersViewController : UITableViewController<PlayerDetailDelegate>{
    Player *selectedPlayer;
}

@property(nonatomic,strong) NSMutableArray *players;

@end

然后在实现文件中实现协议中的方法

-(void) updatePlayer:(Player *)player{
    selectedPlayer = player;
    NSLog(@"name%@",selectedPlayer.name);
}

3,b view中设置一个委托变量

@interface PlayerDetailViewController : UIViewController{
    id<PlayerDetailDelegate> _playerDelegate;
}

@property(nonatomic,strong) IBOutlet UITextView *detailView;
@property(nonatomic,strong) Player *player;
@property(nonatomic,strong) id<PlayerDetailDelegate> _playerDelegate;
- (IBAction)buttonPressed:(id)sender;
@end

在适当的地方调用该委托对象

- (IBAction)buttonPressed:(id)sender{
    if(_playerDelegate != nil && [_playerDelegate respondsToSelector:@selector(updatePlayer:)]){
        self.player.name = self.detailView.text;
        [_playerDelegate updatePlayer:self.player];
    }
    NSLog(@"执行!");
}

4,把b view的委托变量设置成a view,意思就是 ,b view委托a view办事情。

5,事件发生后,用委托变量调用a view中的协议方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值