iOS页面间传值小结
2015-08-25 10:06
260 查看
当A页面跳转到B页面,再从B页面跳会A页面时传值的总结:(B是模态视图)
传值方法:通知、KVO、代理、单例、block
核心代码:
一、通知方法:
************B页面
1、当从B页面跳回A页面时,即在返回按钮的点击事件中发送全局通知
![](http://img.blog.csdn.net/20150825131514762?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
**********A页面
2、在A的.m文件中的viewDidLoad方法中接受这个通知
![](http://img.blog.csdn.net/20150825131628806?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、然后调用这个方法,赋值
![](http://img.blog.csdn.net/20150825131652977?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
二、KVO,通过监听textfield的值的改变
A页面需要传过来的值,所以把A页面作为KVO的观察者,把有值的B页面作为被观察者
********B页面
1、在B的.h文件中设置一个value属性,接收textField的值
![](http://img.blog.csdn.net/20150825131807289?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、在B的.m文件中,返回按钮的点击方法中,赋值给value
![](http://img.blog.csdn.net/20150825131834705?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
******A页面
1、在A页面的.h文件中定义一个B的实例
![](http://img.blog.csdn.net/20150825131900953?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、在A页面的.m文件中覆写实例的set方法
![](http://img.blog.csdn.net/20150825131926890?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、点击跳转到模态视图,在跳转按钮的点击方法中创建了一个模态视图的对象,把这个对象赋给自己自己本身的属性MoTai;
![](http://img.blog.csdn.net/20150825132204679?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4、在A页面的.m文件中变更通知的方法
![](http://img.blog.csdn.net/20150825132231641?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
三、代理方法
首先要确定,谁是代理,A页面设为代理,实现协议的方法,这个方法传进来那个需要的值
***********B页面
1、模态视图B相当于小孩,在B的.h文件中声明要遵守的协议
![](http://img.blog.csdn.net/20150825132313499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
然后声明一个代理属性
![](http://img.blog.csdn.net/20150825132340863?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、在返回按钮的点击方法中启动代理,调用方法,同时把需要的值作为参数传过去
![](http://img.blog.csdn.net/20150825132400019?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
***********A页面
1、A是代理所以要遵守协议.h文件中遵守上边的PassValue协议
![](http://img.blog.csdn.net/20150825132417762?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2、在跳转到模态视图B时,创建了模态视图对象,此时把模态视图的代理设置成A
![](http://img.blog.csdn.net/20150825132440181?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、A是代理,所以在.m文件中要实现代理方法,得到值
![](http://img.blog.csdn.net/20150825132507910?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、单例方法
定义一个单例类:单例只有一个对象
****单例.h文件-------Value.h
![](http://img.blog.csdn.net/20150825132619854?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
****单例.m文件——Value.m
![](http://img.blog.csdn.net/20150825132639866?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
*******B的.m文件中,在返回按钮的点击事件中,初始化单例并且给单例赋上需要的值
![](http://img.blog.csdn.net/20150825132700935?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
******A的.m文件中,在视图显示在屏幕前的方法里,给label赋值
![](http://img.blog.csdn.net/20150825132718687?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
五、block方法
block是一个匿名的代码块,传值也只是block的用法之一。
首先,block的三部曲:
声明、实现、调用。(缺一不可)
一般来讲,block的声明和调用是在一个类中,而block的实现是在另一个类中
传值思路:
1、在B页面里声明一个block,(可以用typeDefine)----声明
2、定义一个带block参数的方法,并且实现,在B页面将要消失的方法中,或者返回A页面的方法中调用block
3、在A页面,实现block,直接赋值----实现
传值方法:通知、KVO、代理、单例、block
核心代码:
一、通知方法:
************B页面
1、当从B页面跳回A页面时,即在返回按钮的点击事件中发送全局通知
**********A页面
2、在A的.m文件中的viewDidLoad方法中接受这个通知
3、然后调用这个方法,赋值
二、KVO,通过监听textfield的值的改变
A页面需要传过来的值,所以把A页面作为KVO的观察者,把有值的B页面作为被观察者
********B页面
1、在B的.h文件中设置一个value属性,接收textField的值
2、在B的.m文件中,返回按钮的点击方法中,赋值给value
******A页面
1、在A页面的.h文件中定义一个B的实例
2、在A页面的.m文件中覆写实例的set方法
3、点击跳转到模态视图,在跳转按钮的点击方法中创建了一个模态视图的对象,把这个对象赋给自己自己本身的属性MoTai;
4、在A页面的.m文件中变更通知的方法
三、代理方法
首先要确定,谁是代理,A页面设为代理,实现协议的方法,这个方法传进来那个需要的值
***********B页面
1、模态视图B相当于小孩,在B的.h文件中声明要遵守的协议
然后声明一个代理属性
2、在返回按钮的点击方法中启动代理,调用方法,同时把需要的值作为参数传过去
***********A页面
1、A是代理所以要遵守协议.h文件中遵守上边的PassValue协议
2、在跳转到模态视图B时,创建了模态视图对象,此时把模态视图的代理设置成A
3、A是代理,所以在.m文件中要实现代理方法,得到值
四、单例方法
定义一个单例类:单例只有一个对象
****单例.h文件-------Value.h
****单例.m文件——Value.m
*******B的.m文件中,在返回按钮的点击事件中,初始化单例并且给单例赋上需要的值
******A的.m文件中,在视图显示在屏幕前的方法里,给label赋值
五、block方法
block是一个匿名的代码块,传值也只是block的用法之一。
首先,block的三部曲:
声明、实现、调用。(缺一不可)
一般来讲,block的声明和调用是在一个类中,而block的实现是在另一个类中
传值思路:
1、在B页面里声明一个block,(可以用typeDefine)----声明
2、定义一个带block参数的方法,并且实现,在B页面将要消失的方法中,或者返回A页面的方法中调用block
3、在A页面,实现block,直接赋值----实现
相关文章推荐
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭(私有API)
- ios开发技巧(一)
- IOSAutolayout
- IOS开发—CALayer介绍
- iOS开发必看的博客汇总
- 在iOS平台使用ffmpeg解码h264视频流(转)
- TextField 设置大全
- iOS 万能跳转界面方法 (runtime)
- iOS开发-常用第三方开源框架介绍
- iOS多线程-01-pthread与NSTread
- iOS工程适配64-bit经验分享
- iOS NSURLSession 封装下载类
- iOS当该装置是水平屏,frame和bounds分别
- iOS开发中(null)与<null>的判断
- iOS中Block全面分析
- iOS kvc
- iOS-键盘常见处理,自定义键盘上的工具条、定义键自盘方法等
- iOS 开发笔记-Storyboard
- iOS 另外一个使用类的代码,四则运算,很简单,熟悉以下
- iOS开发中的NSDateFormatter日期格式解析总结