界面传值问题(正向、反向传值)

注意在界面跳转时:
在presentViewController函数执行的过程中,会执行目标控制器的loadView和viewdidLoad函数。
如果在presentViewController函数以后传递数据,则需要在viewWillAppear函数以后取值

正向传值:

将ViewController传到下一个界面:在下一个界面的.h文件中定义一个全局变量(数据类型和要传值的类型一致),用来接收传递过来的值,在ViewController跳转之前将变量赋值即可

反向传值:

需要在dismisViewController之前使用协议方法,在从上一个界面跳转到当前界面时,需要设置当前界面的代理对象

2.1 使用代理协议反向传值:

将界面的值传递给上一个界面时:当前界面需要有一个遵循某个协议的代理对象,通过代理对象调用协议方法来传值给下一个界面,上一个界面需要遵循某个协议,通过协议中的某个方法来获取下一个界面传过来的值。

反向传值需要使用代理方法来给指定控制器传值
此处的代理协议充当了一个数据传递的标准
上一个控制器 <-- 当前控制器
1 定义协议
2 遵守并实现协议  (由前一个控制器遵守并实现)
3 声明代理属性   (在当前的控制器)
4 建立代理关系    (在前一个控制器中完成)
5 执行代理方法   (在当前控制器)
2.2 使用block反向传值:

从当前界面传值给上一个界面时:需要在当前界面的.h文件中声明一个全局的block,调用block方法进行传值,然后在从上一个界面跳转到当前界面时,实现block方法获取到当前界面的值;

顺序:
上个界面初始化当前界面(会找到当前界面的.h文件中声明的block
方法)->实现block方法—>present跳转到当前界面—>在当前
界面中调用block进行传值—>dismis回上一个界面

全局传值:(注意生命周期)

AppDelegate 是整个程序的一个单例对象
可以作为仓库使用,并且系统提供了方法来获取对象

在AppDelegate的.h文件中声明全局变量(一个变量传递一个值,多个需要多个声明)
哪里需要存入或者取出全局变量,则在哪里声明:
1. 获取当前应用程序对象
UIApplication *app = [UIApplication sharedApplication];
2. 再获取该对象的代理
AppDelegate *gelegate = app.delegate;
3.通过对象的代理取出或者存入对应的全局变量

仅供木木学习,以及有需要的伙伴们阅读~可转载,不可复制粘贴哟~

你可能感兴趣的:(界面传值问题(正向、反向传值))