iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)
实现了以下iOS页面间传值:1.委托delegate方式;2.通知notification方式;3.block方式;4.UserDefault或者文件方式;5.单例模式方式;6.通过设置属性,实现页面间传值
在iOS开发中,我们经常会遇到页面间跳转传值的问题,现归纳总结一下:
情况1:A页面跳转到B页面
方法:
在B页面的控制器中,编写对应的属性,在A页面跳转到B页面的地方,给B的属性赋值即可
在A页面的试图控制器中
情况2:A页面跳转到B页面,B页面再跳转回A页面
主流方案:
(1)通过委托delegate的方式实现
设置协议及方法
设置代理(为防止循环引用,此处采用了weak)
调用
显示
最重要也是最容易忽略的,就是一定要设置delegate的指向。
(2)通过通知notification的方式实现
在B页面的控制器中,发送通知:
在A页面的控制器中,注册通知:
当我们不使用时,要记得删掉通知:
调用,显示
(3)block方式实现
block介绍:http://blog.csdn.NET/totogo2010/article/details/7839061
链接一篇描述block回调挺有意思的文章: http://blog.csdn.Net/mobanchengshuang/article/details/11751671
分析:
在B试图控制器中,定义一个block,参数为字符串
在B试图控制器中,当输入名字,点击对应的确定按钮后
在A试图显示,回调block
(4)KVO方式实现
KVO实现原理介绍:http://blog.csdn.net/kesalin/article/details/8194240
在A视图中,编写以下代码
在B视图编写以下代码
在查阅资料的过程中,我还看到了以下几种方案:
(1)使用SharedApplication,定义一个变量来传递(感觉和单例的方式一样)
(2)使用文件,或者NSUserdefault来传递
在A试图控制器显示
(3)通过一个单例的class来传递
B试图控制器
A试图控制器显示
这里面用到了单例模式,编写了DataSource这个类,存放数据
程序运行截图
A视图:
![](http://images.cnitblog.com/i/501599/201407/181129019433231.png)
B视图
当输入姓名,并点击对应的确认按钮后,会回到A视图,并显示在B视图中输入的姓名
PS:用全局变量的方式也可以实现页面传值的效果。