一、storyboard文件中viewController的跳转和传值
1.跳转
首先storyboard本身提供了很多便捷的方式帮助我们构建布局文件,直接可以通过“连线”操作就可以实现viewContoller之间的跳转,storyboard可以看作是一个页面集合或者viewController的集合。这样不仅可以减少我们编写的代码量,也方便我们查看页面之间的跳转逻辑,下面我简单地说一下,操作方式:
新建几个viewController,使用按住control和左键(触摸板按下去),拖动,就会出现一条带箭头的线,然后移动到你想要跳转的viewController中,释放它,就是出现几个action选项,一般选show即可
2.Action Segue区别
Segue分为以下几种类型,其中Push、Modal、Popover和Replace已弃用。
- Show
- Show Detail
- Present Modally
- Present as Popover
- Custom
PushModalPopoverReplace
Show
- 该方法为视图控制器提供了自适应、灵活的呈现方式。
- 用在UINavigationController堆栈视图时。目的地视图会被压入导航栈顶部。导航条提供一个后退按钮。
- 用在UIViewController实例时,和present()效果一致。
Show Detail
- 与Show相似,但会替换源视图,没有导航条和后退按钮。
Present Modally
- 使用方法present()
- 有多种不同呈现方式,可根据需要设置。在iPhone中,一般以动画的形式自下向上覆盖整个屏幕,用户无法与上一个视图交互,除非关闭当前视图;在iPad中,常见呈现为一个中心框,中心框以动画形式自下向上弹出,同时使底层视图控制器变暗。
- 不提供返回按钮。
Present as Popover
- 在iPad中,目标视图以浮动窗样式呈现,点击目标视图以外区域,目标视图消失;在iPhone中,默认目标视图以模态覆盖整个屏幕。
下面GIF演示了Show和Present在新页面出现方式的不同:
3.传值
使用Storyboard连线转场的方式都会触发prepare方法,在第一个页面覆写prepare方法,在vc.message中填要传的数据。
//使用SB连接转场每次都会触发下面方法
override func prepare(segue: UIStoryboardSegue, sender: AnyObject?) {
//可再每个连线处类似按钮的东西加上identifier,即可判断不同指向
if segue.identifier == "ShowDetailView" {
//不带导航的方式
let vc = segue.destination as! nextViewController
//message是nextViewController的参数
vc.message = "传值"
}
}
选中关联线,设置segue的 Identifier 属性为“ShowDetailView”
4.反向转场
Present Modally不提供返回按钮,需要定于“反向转场(unwind segue)”
在需要退出的控制器里面定于一个方法:此方法只有一个参数,类型必须是UIStoryboardSegue,且有修饰符@IBAction
@IBAction func close(segue:UIStoryboardSegue){
//ReviewViewController是退出到之前的控制器
le