什么是Segue?
在storyBoard上每一根用来界面跳转的线,都是一个UIStoryBoardSegue对象.(简称Segue)
Segue的属性
每一个Segue对象,都有3个属性
给Segue设置唯一标识:
@property (nonatomic, readonly) NSString *identifier;
来源控制器
@property(nonatomic, readonly) id sourceViewController;
目标控制器
@property(nonatomic, readonly) id destinationViewController;
Segue的类型
根据Segue的执行(跳转)时刻,Segue可以分为2大类型.
- 自动型: 点击某个控件后(某个按钮),自动执行Segue,自动完成界面的跳转
- 手动型: 需要通过写代码手动执行Segue,才能完成界面的跳转
注意:
点击'登录'按钮后,就会自动跳转到右边的控制器
如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用自动型Segue
手动型Segue
按住Control键,从来源控制器拖线到目标控制器
手动型的Segue需要设置一个标识
- 在该跳转的时候,使用performSegueWithIdentifier方法执行对应的Segue
[self performSegueWithIdentifier:@"login2contacts" sender:nil];
// Segue必须由来源控制器来执行,也就是说,这个perform方法必须由来源控制器来调用
- 如果点击某个控件后,需要做一些判断,满足一定的条件后,才跳转到下一界面,建议使用手动型Segue
performSegueWithIdentifier:sender: 方法的底层实现
手动型Segue可利用此方法来完成界面的跳转.
- 1. 根据传入的identifier 会去storyBoard中找到有没有指定标识的Segue
- 2. 根据指定的标识,创建一个UIStoryboardSegue对象,把当前的控制器设置为源控制器
- segue.sourceViewController = self;
- 3. 然后根据segue去查找目标控制器,给UIStoryboardSegue的目标控制器属性赋值
- segue.destinationViewController.
- 4. 然后调用当前控制器prepareForSegue: 方法,告诉用户,当前的segue已准备好.
- 5. 在prapareForSegue:方法中默认会调用[segue perform]; 方法
prepareForSegue:方法
当执行performSegueWithIdentifier方法后,会调用这个方法
此方法会在跳转到下一控制器之前调用.
注意:
这个方法通常用来做一些控制器之间的数据传递
- 1. 需要接收数据的控制器要定义一个属性,用来接收其他控制器传来的数据
- 2. 数据的来源控制器要拿到 需要接收数据的控制器
- 3. 给需要接收数据的控制器的属性 赋值
控制器之间的数据传递主要有两种情况: 顺传和逆传
顺传:
控制器的跳转方法: A -> C
数据的传递方向: A -> C
数据的传递方式:
在A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController,也就是C控制器,
直接给C控制器传递数据
逆传:
控制器的跳转方法: A -> C
数据的传递方向: C -> A
数据的传递方式: 让A称为C的代理,在C中调用A的代理方法,通过代理方法的参数传递数据给A控制器