什么是页面传值?? 页面传值:既不同视图控制器之间数据传递的过程 页面传值描述: 页面一:有两个控件分别是展示label和跳转到页面二的button 页面二:有两个控件分别是TextField和传值给页面一的button
页面传值常用的都有哪几个?? 页面传值分别有: 属性传值 单例传值 NSUserDefaults传值 代理传值 block传值 通知传值;
接下来看一下这几个传值方法是怎么使用的:
1.先分别创建两个不可变的数组(NSArray)和声明一个表(UITableView),并且把表的两个代理方法写上并实现代理方法
1.1 声明好数组和表后,然后开始创建数组和表的懒加载
1.2 分别创建六个类(这里我就就用A/B/C/D/E/F来区分类名)
1.3 分别在数组里添加数据,并把表(UITableview)添加到父视图上
1.3.1 vcArr数组内添加的是六个类名,vcTitleVC数组内添加的是六个传值方式的名称。由于懒加载的原因,在向父视图添加子视图时,需要使用 self. 和表的指针来组合添加,数组在添加数据时,也要加上self. 来组合数组指针来使用
1.3.2 实现表的代理,并把数组中的赋值给cell的两个label
1.3.3 其他代理就不多说了,就只说一下cell点击事件,其中画红色线的是重要部分,它可以把所有的类通过类名来进行跳转界面
这些工作准备好后,就开始一个一个介绍传值的写法
在每个类都会配一个类,如:AViewController类会配一个A-2-ViewController、BViewController类会配一个B-2-ViewController,以此类推; 这连个界面分别叫界面一和界面二 如图:
每个界面一都要创建两个懒加载,分别是UILabel、UIButton两个控件
每个界面二都要创建两个懒加载,分别是UITextField、UIButton两个控件
--------------------------属性传值 -- 这就是个分割线---------------------------- 2 属性传值
属性传值可以实现:正向传值(也就是说 上级页面 向下级传值), 而所需要的连接是 页面二中 .h 文件中声明的属性,注意:必须在 .h 中声明,不能在 .m 文件中声明,如果你声明的属性在 页面一中报错,那么首先你要看看属性声明的位置是否是在 .h 写的,然后在进行其他的排查
不多说直接上代码,不过是图片
------------- 页面一 -------------
1)导入A-2-ViewController,创建A-2-ViewController到下面看页面二 2)声明两个控件,分别是UILabel和UIButton 3)懒加载这两个控件,其中UIButton的名字叫跳转页面二,并添加点击事件(方法名自己起)
4)在 viewDidLoad 方法中把两个控件添加到父视图上(self.view) 5)把 button 的点击事件实现 6)在 button 点击事件中初始化 A-2-ViewController ,并使用模态进入 A-2-ViewController 界面(也就是页面二)
------------- 页面二 -------------
1)在 A-2-ViewController.h 中声明一个NSString。方便接收从页面一种传来的值
2)声明两个控件,分别是UITextfield和UIButton 3)懒加载这两个控件,其中UIButton的名字叫跳转页面一,并添加点击事件(方法名自己起)
4)把两个控件添加到父视图(self.view) 5)实现 button 点击事件 6)在 button 事件中写上退出模态
8)回到页面二,在 UITextfield 的懒加载中把接收到的值,赋值给UITextfield的 text 属性
-------------------------单例传值---------------------------
3 单例传值
单例传值可以实现:正向传值、反向传值、跨页面传值
单例传值是这六种传值方式中唯一一个需要创建类文件的传值方式(当然除了封装),因为它需要继承 NSObject 才可以传值,而ViewController.h 和 .m 文件 是继承 UIViewController 不能在其文件中创建单例传值,只能在其文件中使用
----------------------- 页面一 ------------------------
1)先创建一个单例类 2)在单例类中声明一个 NSString 属性,再写一个 加号方法
---------------------- 页面二 ---------------------
3)把两个控件添加在到父视图上(self.view),并且实现 UIButton 点击事件,
------------------开始单例传值 -------------------- 》》》》》正向传值《《《《《 页面一 正向传值 - 赋值
1)在页面一中button点击事件中给单例类属性赋值,并跳转页面二;如上图
页面二 正向传值 - 接收,并赋值
从页面一传值到页面二,页面二接收并赋值显示界面,这叫正向传值
》》》》》反向传值《《《《《 页面二 反向传值 - 赋值
页面一 反向传值 - 接收,并赋值
》》》》》跨页面传值《《《《《
跨页面传值没有写,其实,和正向传值、反向传值的步骤一样的,只不不是上下级页面传值而已。
描述: 页面分别有:页面一、页面二、页面三,它们的关系是一级页面、二级页面、三级页面;
问题描述: 页面一需要跨过页面二,直接传值给页面三,也就是说一级页面在不通过二级页面的情况下,直接传值给三级页面
解决办法: 其实,和正向传值、反向传值的使用步骤一样的
自己可以去试一下!
-------------------------NSUserDefaults传值---------------------------
4 NSUserDefaults传值
NSUserDefaults传值可以实现:正向传值、反向传值、跨页面传值
页面一
1)导入 C-2-ViewController.h 类名 2)声明两个控件,分别是UILabel和UIButton,并且实现懒加载
页面二
------------------开始 NSUserDefaults 传值-------------------- NSUserDefaults - 正向传值 页面一
1)页面一在 button 的点击方法中使用NSUserDefaults,在setObject:@“这里是传值”,forKey:@"这里是写 key(key是随意写的,但在获取传的值时,需要使用同一 key)"
2)赋值和写完key后,需要同步一下,注意:如果不同步,把你在其他页面会获取不到值
页面二
1)在页面二的UITextfield懒加载中获取,并赋值给UITextfield的text属性 2)在获取的时候,如果key不一样,会获取不到该有的内容
NSUserDefaults - 反向传值
页面二
1)在页面二的button点击事件中写NSUserDefaults的传值与key,然后同步一下 2)这时在退出模态界面
页面一
NSUserDefaults - 跨界面传值
跨页面传值没有写,其实,和正向传值、反向传值的步骤一样的,只不不是上下级页面传值而已。
描述: 页面分别有:页面一、页面二、页面三,它们的关系是一级页面、二级页面、三级页面;
问题描述: 页面一需要跨过页面二,直接传值给页面三,也就是说一级页面在不通过二级页面的情况下,直接传值给三级页面
解决办法: 其实,和正向传值、反向传值的使用步骤一样的
自己可以去试一下!
-------------------------代理传值---------------------------
代理传值可以反向传值,一对一的传值,必须两个页面建立代理关系才可以进行传值;
代理传值不能可以正向传值,只能反向传值和跨界面传值
页面一
1)导入页面二类名 2)声明两个控件,分别是UILabel和UIButton,并且实现懒加载
3)把懒加载的两个控件添加到父视图上(self.view) 4)在UIButton点击事件中创建并初始化页面二的类名,然后使用模态跳转到页面二中
页面二
------------------开始代理传值 -------------------- 》》》》》反向传值《《《《《
页面二
1)在页面二的UIButton点击事件中把代理方法写出来,并传值
页面一
》》》》》跨界面传值《《《《《
跨页面传值没有写,其实,和正向传值、反向传值的步骤一样的,只不不是上下级页面传值而已。
描述: 页面分别有:页面一、页面二、页面三,它们的关系是一级页面、二级页面、三级页面;
问题描述: 页面三需要跨过页面二,直接传值给页面一,也就是说三级页面在不通过二级页面的情况下,直接传值给一级页面
解决办法: 其实,和反向传值的使用步骤一样的
自己可以去试一下!
-------------------------block传值---------------------------