iOS深入传值
2020-06-10 本文已影响0人
超级卡布达
传统的代理和block传值一般都是单层传递,想要深入的传递值,一般做法就是通过通知跨类传递。代理、block要想深层传递值会比较麻烦,需要在传递的每一个类上都需要申明,本文将实现一种比较简单的深入传递。代码地址
一.代理模式深入传递
只需将控制器一层层传递到指定类
1.控制器:代理接收者
// 代理传值
ViewController1 *vc = [[ViewController1 alloc] init];
// 传入代理的控制器对象
vc.delegateVC = self;
[self.navigationController pushViewController:vc animated:YES];
-(void)agentFunc1{
NSLog(@"代理回调");
}
2.控制器:将控制器传递给下一层
ViewController2 *vc = [[ViewController2 alloc] init];
vc.delegateVC = self.delegateVC;
[self.navigationController pushViewController:vc animated:YES];
3.控制器:目标控制器
申明代理对象
@property(nonatomic,weak)id<AgentDelegate> delegate;
将代理对象设置为传递进来的控制器
self.delegate = self.delegateVC;
执行代理方法
[self.delegate agentFunc1];
二.block深入传值
和上面有的类似,只需将block变量一层层传递到指定类
1.控制器:block接收者
ViewController1 *vc = [[ViewController1 alloc] init];
// 传入代理的控制器对象
vc.viewBlock = ^{
NSLog(@"block回调");
};
[self.navigationController pushViewController:vc animated:YES];
2.控制器:将block属性传递给下一级
ViewController2 *vc = [[ViewController2 alloc] init];
vc.viewBlock = self.viewBlock;
[self.navigationController pushViewController:vc animated:YES];
3.控制器:目标控制器
self.viewBlock();
~~如果有不足或者错误的地方还望各位读者批评指正,可以评论留言,笔者收到后第一时间回复。
QQ/微信:976971956/ljh976971956。
简书号:超级卡布达
感谢各位观众老爷的阅读,如果觉得笔者写的还凑合,可以关注或收藏一下,不定期分享一些好玩的实用的demo给大家。
文/超级卡布达(简书作者)
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。