最近一段时间在学习如何使用Storyboard,因为之前一直是使用纯代码来写,所以在使用Storyboard的时候碰到了一些问题。
今天我想实现如何从第二个控制器�返回到第一个控制器的时候如何回调传值。大家都知道在OC中回调常用的两种方法:一种是通过代理,另一种是通过block,而在Swift中也是同样的两种方法,只是block在Swift中换了另外一种叫法closure。但是使用Storyboard本来就想尽可能少得写代码,所以通过查阅一些资料找到了另一种回调方式,通过segue来进行回调 传值。
首先我们创建一个工程,然后添加一个SecondViewController文件:
在Main.storyboard里面原来有一个UIViewController继承自ViewController,我们再拖进来一个UIViewController并继承自SecondViewController:
然后我们给第一个ViewController里面添加一个UILabel来接收回调值和一个UIButton来跳转到第二个页面,给第二个ViewController添加一个UITextField里面是需要回调的值和一个UIButton来返回上一个界面:
在ViewController添加一个getSegue方法:
@IBAction func getSegue(segue : UIStoryboardSegue){
}
这时候你会发现再secondViewController的exit上多了一个方法,然后将这个方法与返回的button进行关联
左边会出现一个Unwind segue,然后给这个segue设置identifier:
给secondViewController里面的btn添加一个backTo的方法:
@IBAction func backTo(_ sender: AnyObject) {
performSegue(withIdentifier: "passValue", sender: nil)
}
在ViewController里面getSegue方法添加获取回调的方法:
@IBAction func getSegue(segue : UIStoryboardSegue){
if segue.identifier == "passValue"{
self.titleLabel.text = (segue.source as! SecondViewController).textField.text
}
}
这下就完成了所有的回调操作,可以从secondView里回调到前一个ViewController的label里面。