代理协议消息单方传递机制
单方消息传递通常用于子视图向主视图传递数据,步骤如下;
1.在子视图中
1.1 定义协议及协议中规定的方法,协议名通常是子视图控制器名+Delegate:
@protocol GameViewControllerDelegate <NSObject> - (void)gameOverDeliverTimer:(NSString *)timer; @end
1.2 定义代理:
@property (weak, nonatomic) id <GameViewControllerDelegate> delegate;
1.3 子视图中在需要的地方,通过定义的代理调用协议方法,在父视图中没有设置代理的话该方法是不起作用的:
[_delegate gameOverDeliverTimer:_timerLabel.text]
2.在父视图中
2.1 父视图头文件需遵循子视图的协议才有资格申请成为代理:<GameViewControllerDelegate>
2.2 推出子视图控制器前,将自己设置成为子视图的代理,通常是在prepareSegue中实现:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ GameViewController *controller = [segue destinationViewController]; controller.delegate = self; }
2.3 实现协议中的方法:
- (void)gameOverDeliverTimer:(NSString *)timer{ NSLog(@"最佳成绩:%@秒", timer); }