IOS中的协议-代理,传值

来源:互联网 发布:app php服务器搭建 编辑:程序博客网 时间:2024/06/05 11:57

来讲,在控制器A->B控制器,传递数据的话比较简单,属性传值就可以

但是当在A->B, B->A之后,B又要传递数据给A,就相当于java中的回调函数(好久不做java了,应该是= =)

那么这个通常我们都叫做数据的逆向传递

数据的逆向传递:

可用的方式:1》代理传值,2》block回调,3》nsdefault(不建议),4》通知(notification)

这里讲的思代理(delegate)

单方消息传递通常用于子视图向主视图传递数据,步骤如下;


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中实现:

1234 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

     GameViewController *controller = [segue destinationViewController];  

     controller.delegate = self; 

2.3 实现协议中的方法:

 - (void)gameOverDeliverTimer:(NSString *)timer{   

  NSLog(@"最佳成绩:%@秒", timer);

 } 

今天先写到代理传值,有空会写block传值的做法
0 0
原创粉丝点击