[Swift实际操作]八、实用进阶-(8)使用performSegue在故事板页面之间进行数据传递
本文将演示故事板页面之间的数据传递。
首先在一个空白项目中,打开项目自带的故事板文件(Main.storyboard)。
故事板中已经拥有了一个视图控制器,点击选择该视图控制器。
然后依此点击[Editor(编辑器)]->Embed In(置入)->[Navigation Controller(导航控制器)],
将这个视图控制器,置入一个导航控制器之内。
接着继续往导航控制器添加一个新的视图控制器。
首先点击右上角的显示或隐藏工具面板图标,打开右侧的面板区。
然后点击故事板下方的滚动条,查看右侧的内容。
在在组件中的视图控制器图标上按下手指,然后向故事版中拖动。
此时故事板中多了一个新的视图控制器,现在将两个视图控制器进行连接,
点击选择原来的视图控制器。
然后三个图表中的第一个按下鼠标右键,并向右侧的视图控制器拖动。
当松开鼠标时,会弹出一个选项菜单,选择菜单中的push(deprecated)选项,
使第一个视图控制器,可以再导航控制器之中,滑入第二个视图控制器。
然后选择两个视图控制器之间的连接线。
给该连接线进行命名,这样就可以在第一个视图控制器之中,
通过该名称的连接线,滑入第二个视图控制器。
Identifier: showDetail。按下键盘上的回车键,完成命名操作。
接着往视图控制器中添加一个按钮,点击右侧的垂直滚动条,跳转到按钮所在的位置。
点击故事板下方的滚动条,以完整显示第一个视图控制器。
将按钮控件从控件库中,拖动到故事板中的适当位置。
当用户点击该按钮时,从当前的视图控制器,跳转到右侧的视图控制器。
点击进入尺寸检查器面板。点击右侧的垂直滚动条,跳转到坐标和尺寸设置区域。
然后依此设置按钮控件的坐标、宽度和高度的数值,同时观察按钮的变化。
设置一个和屏幕大小相同的按钮,接着点击切换至属性检查器面板。
点击右侧的垂直滚动条,跳转到背景颜色设置区域。
打开Background的下拉箭头,打开系统预设的颜色面板。
然后选择一种颜色作为按钮的背景颜色。
接着点击顶部的显示辅助编辑器图标,打开辅助编辑器。
点击右上角的显示或隐藏工具面板图标,隐藏右侧的面板区。
在按钮上按下鼠标右键,并拖动到右侧的类文件中,
从而建立一个和按钮绑定的动作。
点击连接右侧的下拉箭头,选择列表中的动作选项。
Connection:Action
在名称输入框内输入属性的名称
Name:showDetail
然后点击连接图标Connect,在类文件中创建一个和按钮控件相连接的方法。
完成控件和动作的连接之后,点击顶部的显示标准编辑器图标,切换至标准编辑器模式。
接着对第二个视图控制器进行编辑。
首先选择根视图。
点击右上角的显示或隐藏图标,切换右侧面板区的可见性。
将一个标签控件,从控件库拖动到故事板的适当位置。
点击显示尺寸检查器图标,点击显示尺寸检查器面板。
然后依此设置标签,宽度和高度的数值,同时观察标签的变化。
获得一个和屏幕相同大小的标签控件,接着点击切换至属性检查器面板。
点击居中的图标,将文字居中显示。
设置Font、background.
接着创建一个和该视图控制器绑定的类文件。在类文件中点击鼠标右键,弹出右键菜单。
New File ->Next ->Class:DetailViewController /SubClass:UIVIew ->Next ->Create
然后点击打开故事板文件。选择故事板中的视图控制器。接着切换至身份检查器面板。
在Class类名输入框内,输入刚刚创建的类文件(DetailViewController),
使故事板中的视图控制器和类文件进行绑定。
点击顶部的显示辅助编辑器图标,打开辅助编辑器。
在在标签上按下鼠标右键,并拖动到右侧的类文件中,从而建立一个和标签绑定的属性。
设置Name:detailLabel
DetailViewController.swift文件
1 import UIKit 2 3 class DetailViewController: UIView{ 4 5 //添加一个字符串类型的属性,用来接收来自上一个页面传递的数据 6 var parameter: String! 7 8 @IBOutlet var detailLabel:UILabel! 9 10 override func viewDidLoad() 11 { 12 super.viewDidLoad() 13 //接着同步更新页面中的标签的文字内容 14 self.detailLabel.text = self.parameter 15 } 16 17 //析构方法 18 override func didReciveMemoryWarning(){ 19 super.didReceiveMemoryWarning() 20 21 } 22 }
ViewController.swift文件
1 import UIKit 2 3 class ViewController: UIViewController{ 4 5 override func viewDidLoad() 6 { 7 super.viewDidLoad() 8 } 9 10 @IBAction func showDetail(_ sender:Any) 11 { 12 //当故事板中的按钮被点击时,通过指定名称的连接线, 13 //在导航控制器中,跳转到第二个视图控制器 14 self.performSegue(withIdentifier: "showDetail", sender: nil) 15 } 16 17 //重写父类中的方法,用来监听故事板中的连接线的跳转动作。 18 override func prepare(for segue: UIStoryboardSegue, send: Any?) 19 { 20 //获得连接的目标视图控制器,并转换为指定类型 21 let vc = segue.destination as! DetailViewController 22 //设置该视图控制器的属性,然后点击至DetailViewController.swift文件 23 vc.parameter = "Hello,Strengthen!" 24 } 25 26 //析构方法 27 override func didReciveMemoryWarning(){ 28 super.didReceiveMemoryWarning() 29 30 } 31 }
1 import UIKit 2 3 internal class ViewController: UIViewController{ 4 5 override internal func viewDidLoad() 6 7 @IBAction func showDetail(_ sender:Any) 8 9 override internal func didReceiveMemoryWarning() 10 }