美文网首页
iOS深入传值

iOS深入传值

作者: 超级卡布达 | 来源:发表于2020-06-10 16:50 被阅读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给大家。

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

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

    相关文章

      网友评论

          本文标题:iOS深入传值

          本文链接:https://www.haomeiwen.com/subject/sijptktx.html