传值需求
- 将用户信息 userInfo 作为传值对象进行传递。
场景一 主页传值到详情页
- 现在模拟传递用户名:userName。
属性传值
- 属性传值一般用于从主页传值到详情页。
- 传值步骤:
1 | steps 1:在DetailViewController.h文件中将需要获取的值声明成属性。 |
init传值
- init方法传值与属性传值类似,一般用于从主页传值到详情页。
1 | steps 1:在DetailViewController.h文件中声明init方法。 |
场景二 详情页传值到主页
Block块传值
- block在传值中主要用于回调,现模拟从详情视图控制器传值到主页视图控制器。
1 | steps 1:在 DetailViewController.h文件中声明block类型、属性以及block回调方法。 |
- Tips:
1、为block取别名,可在参数列表中将需要传递的参数写成形参;
2、设置block属性注意使用copy关键字;
3、设置一个方法持有当前block;
4、在合适的地方进行调用类似于代理;
5、在创建该对象的地方进行block方面的调用;
协议传值
- 协议传值又称代理传值,可直接将需要传递的值从委托方传送至代理人,协议传值可用于从下一个视图控制器传值到上一个视图控制器(详情页传值到主页),现假定主页是详情页的代理。
- 传值步骤
1 | steps 1:在DetailViewController.h文件中声明协议,并且设置代理属性。 |
场景三 多界面传值
通知传值
- 通知传值适用于任意控制器(界面),不管两个控制器之间是否有关联,只需满足一个条件,在传值的时候必须保证通知已经被设定,即已添加通知(观察者observer)。现假设从详情界面传值到主界面,即从下一个界面传值到上一个界面,具体实现方式如下。
- 传值步骤
1 | steps 1:注册通知:为保证在传值时通知已经被设定,因此需要在HomeViewController.m文件中注册通知。 |
- 注意
1、通知传值的使用会贯穿如下4个步骤:注册通知 -> 发送通知 -> 处理通知 -> 移除通知
2、通知必须先注册再使用,通知必须在不需要的时候调用remove方法移除。
单例传值
- 单例贯穿整个应用程序声明周期,利用单例传值适用于任何控制器,使用前提是在获取值的时候必须保证单例属性有值,否则获取值为nil,此处模拟从主页视图控制器传值到详情视图控制器。
- 传值步骤
1 | steps 1:创建单例,继承于NSObject,任意命名,必须符合规范。此处创建单例类名为Singleton。 |
NSUserDefaults传值
- NSUserDefaults系统单例传值和自定义单例传值基本一致,首先需保证NSUserDefaults对应key中有值,此处模拟主页视图控制器传值到详情视图控制器
- 传值步骤
1 | steps 1:在HomeViewController.m中获取NSUserDefaults实例,并且存值。 |