[Xcode 实际操作]九、实用进阶-(24)使用Segue(页面的跳转连接)进行页面跳转并传递参数
本文将演示使用Segue(页面的跳转连接)进行页面跳转并传递参数。
参照结合:[Xcode10 实际操作]九、实用进阶-(23)多个Storyboard故事板中的页面跳转
打开并编辑主故事版【Main.storyboard】
点击【库图标】,打开控件库面板,
在【View Controller】视图控制器上双击,往故事板中插入第一个视图控制器。
点击故事版底部的【+】或【-】放大或缩小故事板的显示比例。
将另一个视图控制器上按下鼠标右键,然后拖动到右侧的视图控制器。
(两个方法:1.鼠标右键 2.【Command】+鼠标左键)
在弹出的连接类型列表中,选择【Show】显示选项。给两个视图控制器添加一个跳转关系的连接。
然后选择两个视图之间的连接线,编辑连接的属性。
点击【显示或隐藏检查器】图标,打开右侧的检查器面板。
【Identifier】连接标识符输入框:segueToPage3,输入连接的名称。
接着选择控制器的根视图,需要往根视图上添加一个标签控件。
点击【库图标】,打开控件库面板,双击【Label】,导入所需的控件。
Label将用来显示,从上一个页面,传递到当前页的参数。
点击【居中】按钮,将标签上的文字居中显示。
使用快捷键【Command】+【N】创建在故事版中,视图控制器对应的类文件。
(在项目文件夹【DemoApp】上点击鼠标右键【New File】创建)
->【Cocoa Touch Class】->【Next】->
【Class】:Page3ViewController。输入类名。
【Subclass of】:UIViewController,父类名称
【Language】:Swift,类文件的默认语言
->【Next】->保存默认的存储位置点击【Create】
在项目导航区,打开并编辑上文创建的故事版文件【Storyboard.storyboard】
在故事版文档框架区,选择视图控制器,给视图控制器指定对应的类文件。
点击身份检查器图标,进入身份检查器面板。
【Class】::Page3ViewController,即输入刚刚创建的类文件的名称。
这样故事板中的视图控制器,就和类文件进行了绑定和连接。
点击视图控制器中的标签控件,点击【显示或隐藏辅助编辑器】图标,打开辅助编辑器。
选择控制器中的标签控件,需要将标签控件,与绑定的类文件的方法进行连接。
在按钮上点击鼠标右键,然后拖动到右侧的代码文件中。
(两个方法:1.鼠标右键 2.【Command】+鼠标左键)
设置:
【Connection】:Outlet
【Name】:nameLabel
点击【Connect】完成按钮的连接设置。
点击故事版底部的【+】或【-】放大或缩小故事板的显示比例。
将另一个视图控制器上按下鼠标右键,然后拖动到右侧的视图控制器。
(两个方法:1.鼠标右键 2.【Command】+鼠标左键)
在弹出的连接类型列表中,选择【Show】显示选项。给两个视图控制器添加一个跳转关系的连接。
然后选择两个视图之间的连接线,编辑连接的属性。
点击【显示或隐藏检查器】图标,打开右侧的检查器面板。
【Identifier】连接标识符输入框:segueToPage3,输入连接的名称。
接着选择控制器的根视图,需要往根视图上添加一个标签控件。
点击【库图标】,打开控件库面板,双击【Label】,导入所需的控件。
Label将用来显示,从上一个页面,传递到当前页的参数。
点击【居中】按钮,将标签上的文字居中显示。
使用快捷键【Command】+【N】创建在故事版中,视图控制器对应的类文件。
(在项目文件夹【DemoApp】上点击鼠标右键【New File】创建)
->【Cocoa Touch Class】->【Next】->
【Class】:Page2ViewController。输入类名。
【Subclass of】:UIViewController,父类名称
【Language】:Swift,类文件的默认语言
->【Next】->保存默认的存储位置点击【Create】
在项目导航区,打开并编辑上文创建的故事版文件【Storyboard.storyboard】
在故事版文档框架区,选择视图控制器,给视图控制器指定对应的类文件。
点击身份检查器图标,进入身份检查器面板。
【Class】::Page2ViewController,即输入刚刚创建的类文件的名称。
这样故事板中的视图控制器,就和类文件进行了绑定和连接。
点击视图控制器中的标签控件,点击【显示或隐藏辅助编辑器】图标,打开辅助编辑器。
选择控制器中的按钮控件,需要将按钮控件,与绑定的类文件的方法进行连接。
在按钮上点击鼠标右键,然后拖动到右侧的代码文件中。
(两个方法:1.鼠标右键 2.【Command】+鼠标左键)
设置:
【Connection】:Action
【Name】:gotoNextPage
点击【Connect】完成按钮的连接设置。
打开并编辑【Page2ViewController.swift】
1 import UIKit 2 3 class Page2ViewController: UIViewController { 4 5 //实现按钮控件的连接方法 6 @IBAction func gotoNextPage(_ sender: Any) { 7 //当点击按钮时,导航视图控制器,将通过之前设置的连接名称, 8 //跳转到指定的视图控制器。 9 self.performSegue(withIdentifier: "segueToPage3", sender: nil) 10 } 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // Do any additional setup after loading the view. 15 } 16 17 // MARK: - Navigation 18 19 // In a storyboard-based application, you will often want to do a little preparation before navigation 20 //设置页面跳转时传递的参数 21 //本代理方法,允许在页面跳转前,做一些准备工作。 22 //比如向下一个页面传递数值。 23 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 24 // Get the new view controller using segue.destination. 25 // Pass the selected object to the new view controller. 26 //首先判断当前页面的跳转连接, 27 //其名称是否为之前设置的连接名称。 28 if(segue.identifier == "segueToPage3") 29 { 30 //然后获得将要跳转到的目标视图控制器,对该视图控制器的属性进行赋值,实现数据的传递。 31 let vc = segue.destination as! Page3ViewController 32 vc.name = "Jerry" 33 } 34 } 35 }
打开并编辑【Page3ViewController.swift】
现在来编写代码,接收页面传递来的数据,并显示在页面上。
1 import UIKit 2 3 class Page3ViewController: UIViewController { 4 5 @IBOutlet weak var nameLabel: UILabel! 6 //首先添加一个属性,用来接收从上一个页面传来的数据 7 var name = "" 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 12 // Do any additional setup after loading the view. 13 //然后在继承自父类的视图完成加载的方法中, 14 //将接收到的数据,显示在标签对象上。 15 self.nameLabel.text = name 16 } 17 }
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 //现在为第二个按钮添加点击事件 6 @IBAction func gotoPage1OfStoryboard(_ sender: AnyObject) { 7 //从项目中,获得指定名称的故事版文件 8 let storyBoard = UIStoryboard(name: "ServiceStoryboard", bundle: nil) 9 //获得故事板中的初始视图控制器 10 let vc = storyBoard.instantiateInitialViewController() 11 12 //在当前的页面中,跳转到指定的视图控制器 13 self.navigationController?.pushViewController(vc!, animated: true) 14 } 15 16 //现在为第三个按钮添加点击事件 17 @IBAction func gotoPage2OfStoryboard(_ sender: AnyObject) { 18 //从项目中,获得指定名称的故事版文件 19 let storyBoard = UIStoryboard(name: "ServiceStoryboard", bundle: nil) 20 //根据上文给视图控制器设置的故事版标识,获得对应的故事版控制器 21 let vc = storyBoard.instantiateViewController(withIdentifier: "servicePage") 22 23 //在导航控制器中,从当前的页面跳转到指定的视图控制器 24 self.navigationController?.pushViewController(vc, animated: true) 25 //在页面进行跳转的同时,隐藏底部的标签栏 26 self.tabBarController?.tabBar.isHidden = true 27 } 28 29 override func viewDidLoad() { 30 super.viewDidLoad() 31 // Do any additional setup after loading the view, typically from a nib. 32 } 33 34 override func didReceiveMemoryWarning() { 35 super.didReceiveMemoryWarning() 36 // Dispose of any resources that can be recreated. 37 } 38 }