画面跳转

画面跳转有两种方式,一种是直接用ViewController跳转,另一种是通过UINavigationController控制跳转,两种除了显示和传值方式略有不同其他都大同小异

1.ViewController跳转

创建如下的画面,左侧是程序入口,放入了一个button控件,右侧将背景色改为黑色并放入了一个label控件用来显示数据

右键按住button控件并拖动到右侧画面上,选择跳转方式 注意要选择Action Segue,Non-Adaptive Action Segue目前不推荐

为Segue赋一个id以便在代码中判断

在左侧的ViewController中重写prepare方法,这个方法就是在画面跳转前执行的代码
segue.destination就是将要跳转到的ViewController,直接强制转换并赋值就能取到数据


返回时则需要在第一个ViewController写入如下方法,然后在第二个画面中将需要返回的按钮右键拖到上方退出处,然后选择相应的方法
传值则是在第一个画面中强制转换得到的

2.UINavigationController跳转
UINavigationController跳转方式需要使用UINavigationController
先将storyboard中的ViewController全部删除,然后拖入一个UINavigationController

为了方便将右侧自动生成的TableViewController删除,拖入一个普通的ViewController

右击按住左侧的UINavigationController拖到右侧松开,选择root view controller可以将UINavigationController与拖入的 ViewController关联起来

在ViewController中拖入一个button,然后再拖入一个ViewController,并拖入label显示数据

注意要选择Action Segue,Non-Adaptive Action Segue目前不推荐

传值方式与第一种相同,重写prepare即可

返回传值可以在跳转到第二个画面时将第一个画面的ViewController传入,返回时通过绑定左上角的Navigation返回按钮事件,然后直接赋值或调用方法即可

UINavigationController的返回可以通过第二层画面左上角的返回按钮返回,如果想手动返回可以使用代码

1
 self.navigationController?.popViewController(animated: true)  

注意,当跳转的目的是UINavigationController时,强制转换需要转为UINavigationController,然后获得topViewController属性才是真正的跳转目的

1
2
 let controller = segue.destination as! UINavigationController
 let des = controller.topViewController as! SecondViewController

除了直接强制转换来传值,也可以通过写一个协议,然后跳转时实现协议来操作数据