iOS 页面间几种传值方式
属性(KVC,KVO),代理(delegate),block,单例,通知(NSNotification)
**应用场景:**第二个视图控制器如何获取第一个视图控制的信息
eg:第二个界面中的lable显示第一个界面的textField中的文本
这就需要用到属性(kvc,kvo)传值,Block传值
页面间传值有八大传值方式,下面我们就简单介绍下页面间常用的五种传值方式:
属性传值
具体的就是重写get/set 方法,进行赋值 传入:set 重写set方法 数据模型传递 传出:get 重写模型数组的getter方法实现懒加载
- 首先我们建立一个RootViewControllers和一个DetailViewControllers,在DetailViewControllers中声明一个textString属性,用于接收传过来的字符串
- 同时创建一个Lable用来显示传过来的字符串
- 在RootViewControllers上引入DetailViewControllers同时声明一个textField属性用来输入字符串
- 然后在RootViewControllers上我们创建并添加一个button,当点击button时响应相应方法进行视图间的切换完成视图间的传值
//创建对象, 就为对应属性textString 赋值 detailVC.textString = self.textField.text;
Block传值
block传值也是从第二个界面给第一个界面传值
- 首先我们在DetailViewcontrollers的.h文件中,属性
- 在RootViewControllers的.m文件中,其他不变,在button的响应方法里我们为block属性赋值完成block传值
- 首先我们在DetailViewcontrollers的.h文件中,属性
原理 利用Block的回调
Delegate传值
RootViewControllers页面push到DetailViewControllers页面,如果DetailViewControllers页面的信息想回传(回调)到RootViewControllers页面,用代理传值,其中DetailViewControllers定义协议和声明代理,RootViewControllers确认并实现代理,RootViewControllers作为DetailViewControllers的代理
首先在DetailViewControllers.h文件中我们创建协议方法
在DetailViewControllers的.m中我们判定代理对象存在时,为其绑定相应方法
RootViewControllers的.m文件中我们指定代理并让其执行代理的方法
单例传值
单例传值(实现共享)
通知传值
谁要监听值的变化,谁就注册通知 特别要注意,通知的接受者必须存在这一先决条件
====
具体代码实现在