这是 ViewController Programming Guide 中 Presentations and Transitions 下的一部分,稍后顺序可能会调整
使用 segues 来定义 storyboard 文件中两个 VC 之间的过渡,一个 segues 总是 present VC,unwind segue 用来 dismiss VC
创建一个 segue,可以通过 Control-click 的方式
某些元素支持 mulitple sueges
segue 的类型有以下几种:
| Segue type | Behavior | | :-------------------------:|:---------------------| | Show (Push) | 使用 showViewController:sender:
方法来显示一个新的 VC,对于大部分 VC,这个seguge 是 model 显示,但也有一部分 VC 会覆盖此方法提供自己的实现,比如 navigation controller,UIKit 使用 targetViewControllerForAction:sender:
来定位 source view controller | | Show Detail (Replace) | 展示新 VC 通常用 showDetailViewController:sender:
该 segue 通常仅仅被植入在 UISplitViewController 对象中,通过这个 segue,split view controller 替换他的 second childVC(detail VC),大部分是 modal 形式| | Present Modally | 最基本的模态展示 |
| Present as Popover | 在 horizontally regular 环境下,VC 出现在 popover 中,在 horizontally compact 环境下,还是全屏 modal 展示|
| Tables | Are | Cool | | ------------- |:-------------:| -----:| | col 3 is | right-aligned | $1600 | | col 2 is | centered | $12 | | zebra stripes |
| $1 |
创建完 segue,你可以指定 identifier,这些 identifier 包含在 UIStoryboardSegue 对象中
如图,在 segue 过程中,有两个地方,你可以做一些事情
shouldPerformSegueWithIdentifier:sender:
你可以返回 NO,阻止 segue 发生 prepareForSegue:sender:
你可以从 sourceVC 为 destionationVC 准备些数据 编程的方式主要通过 performSegueWithIdentifier:sender:
方法来实现 segue
Seuge 的生命周期:
Seuge 对象是 UIStoryboardSegue 类的实例或子类,你不能直接创建,UIKit 会在 seuge 被触发时创建他们,以下是具体过程:
initWithIdentifier:source:destination:
方法被调用 prepareForSegue:sender:
方法被调用 perform
被调用,执行过渡 实现自定义 Seuge
实现自定义的 Seuge 主要是创建 UIStoryboardSegue 的子类,实现以下方法:
initWithIdentifier:source:destination:
使用自定义的 seuge 对象,记得调用 super
perform
方法,并在其中设置你的转场动画 如果,你为 seuge 添加了一些属性,在过渡开始前,你可以在 prepareForSegue:sender:
里设置他们
- (void)perform { // Add your own animation code here. [[self sourceViewController] presentViewController:[self destinationViewController] animated:NO completion:nil]; }