iOS深入传值

简介: 传统的代理和block传值一般都是单层传递,想要深入的传递值,一般做法就是通过通知跨类传递。代理、block要想深层传递值会比较麻烦,需要在传递的每一个类上都需要申明,本文将实现一种比较简单的深入传递。

传统的代理和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();

代码地址

相关文章
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
221 0
|
iOS开发
iOS代理 通知 block传值的规范写法
iOS代理 通知 block传值的规范写法
117 0
|
iOS开发
iOS 页面传值知多少?你真的了解吗?
iOS开发中,页面传值是很常见的,但是页面传值你究竟知道多少呢?笔者这篇文章就是给大家介绍一下页面传值的具体方式,有不足之处,欢迎大家指正,希望能和大家共同进步。说明一下:这里所说的正向、反向传值是指相关联的两个页面间的传值。
|
iOS开发
iOS开发之利用Block逆向传值
在iOS开发之通过代理逆向传值一文中,分析了利用代理模式来逆向传值,其实还有一些其他的方式,如通知、Block等,相比较代理,我个人认为反而要简单些,但是需要处理好细节问题,如Block循环引用。
1001 0
|
iOS开发
iOS开发之通过代理逆向传值
在iOS开发中,传值是几乎每个App都会用到的,对于传统的顺向传值应该说是比较简单的,但是逆向传值往往会用到代理模式来实现,很多同学在这一块有迷惑,迷惑的不是怎么逆向传值,而是不理解代理模式,下面就来分析一下,如何理解和快速上手代理模式,并以一个简单的逆向传值为案例,看看代理模式是不是很难。
748 0
|
iOS开发
【iOS 开发】Controller 之间使用代理传值
Controller 传值 控制器之间经常需要互相传递值,第一个控制器(简称 MasterVC)在通过 NavigationController Push 第二个控制器(简称 DetailVC)的时候,可以捕获到 DetailVC,所以可以设定后者的变量。
848 0
|
iOS开发
IOS中传值方法
UINavigationController *menuController = (UINavigationController*)((AppDelegate*)[[UIApplication sharedApplication] delegate]).
589 0
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
106 3