iOS 一一 storyBoard中segue实现页面跳转

什么是Segue?

在storyBoard上每一根用来界面跳转的线,都是一个UIStoryBoardSegue对象.(简称Segue)

iOS 一一 storyBoard中segue实现页面跳转_第1张图片


Segue的属性

每一个Segue对象,都有3个属性

给Segue设置唯一标识:

@property (nonatomic, readonly) NSString *identifier;

iOS 一一 storyBoard中segue实现页面跳转_第2张图片


来源控制器

@property(nonatomic, readonly) id sourceViewController;

目标控制器

@property(nonatomic, readonly) id destinationViewController;

iOS 一一 storyBoard中segue实现页面跳转_第3张图片


Segue的类型

根据Segue的执行(跳转)时刻,Segue可以分为2大类型.

  • 自动型: 点击某个控件后(某个按钮),自动执行Segue,自动完成界面的跳转
  • 手动型: 需要通过写代码手动执行Segue,才能完成界面的跳转
自动型Segue
按住control 键,直接从控件拖线到目标控制器
iOS 一一 storyBoard中segue实现页面跳转_第4张图片      iOS 一一 storyBoard中segue实现页面跳转_第5张图片

注意: 

点击'登录'按钮后,就会自动跳转到右边的控制器

如果点击某个控件后,不需要做任何判断,一定要跳转到下一个界面,建议使用自动型Segue


手动型Segue

按住Control键,从来源控制器拖线到目标控制器

iOS 一一 storyBoard中segue实现页面跳转_第6张图片


手动型的Segue需要设置一个标识

iOS 一一 storyBoard中segue实现页面跳转_第7张图片

  • 在该跳转的时候,使用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]; 方法
[segue perform];方法的底层实现;
调用 Segue 对象的 - ( void )perform; 方法开始执行界面跳转操作
 如果 seguestylepush
取得 sourceViewController 所在的 UINavigationController
调用 UINavigationController push 方法将 destinationViewController 压入栈中,完成跳转

如果 seguestylemodal
调用 sourceViewController presentViewController 方法将 destinationViewController 展示出来

prepareForSegue:方法

当执行performSegueWithIdentifier方法后,会调用这个方法

此方法会在跳转到下一控制器之前调用.

注意:

这个方法通常用来做一些控制器之间的数据传递

  • 1. 需要接收数据的控制器要定义一个属性,用来接收其他控制器传来的数据
  • 2. 数据的来源控制器要拿到 需要接收数据的控制器
  • 3. 给需要接收数据的控制器的属性 赋值

控制器之间的数据传递

控制器之间的数据传递主要有两种情况: 顺传和逆传

顺传:

控制器的跳转方法: A -> C

 数据的传递方向: A -> C

 数据的传递方式: 

A的prepareForSegue:sender:方法中根据segue参数取得destinationViewController,也就是C控制器,

直接给C控制器传递数据

iOS 一一 storyBoard中segue实现页面跳转_第8张图片

逆传:

控制器的跳转方法: A -> C

数据的传递方向: C -> A

数据的传递方式: 让A称为C的代理,在C中调用A的代理方法,通过代理方法的参数传递数据给A控制器

iOS 一一 storyBoard中segue实现页面跳转_第9张图片

iOS 一一 storyBoard中segue实现页面跳转_第10张图片

你可能感兴趣的:(iOS)