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给大家。

文/超级卡布达(简书作者)

著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

上一篇下一篇

猜你喜欢

热点阅读