單方消息傳遞通常用于子視圖向主視圖傳遞數(shù)據(jù),步驟如下;
1.在子視圖中
1.1 定義協(xié)議及協(xié)議中規(guī)定的方法,協(xié)議名通常是子視圖控制器名+Delegate:
@PRotocol GameViewControllerDelegate <NSObject>- (void)gameOverDeliverTimer:(NSString *)timer; @end
1.2 定義代理:
@property (weak, nonatomic) id <GameViewControllerDelegate> delegate;
1.3 子視圖中在需要的地方,通過定義的代理調(diào)用協(xié)議方法,在父視圖中沒有設(shè)置代理的話該方法是不起作用的:
[_delegate gameOverDeliverTimer:_timerLabel.text]
2.在父視圖中
2.1 父視圖頭文件需遵循子視圖的協(xié)議才有資格申請成為代理:<GameViewControllerDelegate>
2.2 推出子視圖控制器前,將自己設(shè)置成為子視圖的代理,通常是在prepareSegue中實現(xiàn):
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ GameViewController *controller = [segue destinationViewController]; controller.delegate = self;}
2.3 實現(xiàn)協(xié)議中的方法:
- (void)gameOverDeliverTimer:(NSString *)timer{ NSLog(@"最佳成績:%@秒", timer);}
新聞熱點
疑難解答