一、简介
在开发iOS应用时,页面间的跳转时很正常也很频繁的操作。在页面之间跳转,包括从一个界面跳转到一个新的页面,以及从新的页面返回之前已经打开过的页面。这里实际上,iOS使用页面栈的方式对页面进行管理。
先打开的页面在栈的底部,跳转到的新页面在栈的顶部,想要打开新的页面,实际上时向栈顶加页面,而想要返回,就是从栈顶开始,将返回目标页面之上的页面全都移除。
利用Storyboard实现页面间的跳转时十分容易的一件事情,我们可以右击某个按钮,然后关联action到新的页面,选择对应的segue类型即可。
而从新的页面返回到旧的页面,就需要增加一点操作了。
二、示例
2.1 准备
- 使用Xcode新建一个iOS工程,并命名为“DismissSegue”
- 拖拽两个“View Controller”到画板,分别命名为“ActionViewController”以及“DetailViewController”
- 点选默认生成的“View Controller”,为之生成一个“Navigation Controller”
- 拖拽一个“Bar Button Item”到默认的“View Controller”的导航上,命名为“Action View”
- 向“ActionViewController”中添加两个Button,并修改文字为“Show”,“Dismiss”
- 向“DetailViewController”中添加两个Button,并修改文字为“Home”,“Action View Contrller”
- 右击“ViewController”上的“Action View”按钮,添加Action到“Action View Controller”,动作类型选为“Present Modally”
- 右击“Action View Controller”上的Show按钮,添加Action到“Detail View Controller”,动作类型选为“Present Modally”
- 添加新的类文件“ActionViewController”,并关联到“Action View Controller”
2.2 添加返回动作
- 打开“ViewController.swift”,并添加如下代码
@IBAction func unwindSegue(segue: UIStoryboardSegue) {
NSLog("Back to Home View Controller!")
}
- 打开“ActionViewController.swift”两个文件,并添加如下代码
@IBAction func unwindToActionViewController(segue: UIStoryboardSegue) {
NSLog("Back to Action View Controller!")
}
- 打开Storyboard,找到“Action View Controller”,按住Ctrl健拖动“Dismiss”按钮,到最上方的“Exit”处,此时会弹出之前添加的两个方法以供关联。
- 为“Dismiss”按钮选择“unwindSegue”方法进行关联
- 为“Home”按钮选择“unwindSegue”方法进行关联,为“Action View Controller”按钮选择“unwindToActionViewController”进行关联
- 运行程序
三、说明
通过运行上面的示例程序我们可以看到,返回按钮的返回动作取决于我们想要返回的目标视图是哪个,我们确定要返回的视图后,我们需要做的就是通过关联“Exit”中对应视图的Unwind Segue动作即可。
注意:
- 返回按键关联到的,不是当前视图的UnwindSegue动作,而是要返回的目标视图的UnwindSegue。UnwindSegue的目的是 返回 ,而不是 关闭 。
- Unwind Segue动作,需要标识为
@IBAction
,并使用segue: UIStoryboradSegue
作为传入参数(参数名随意)。- 除了使用UnwindSegue制作返回动作之外,还可以使用导航控制器实例进行编程完成。