废话不多说,直接进入正题
首先在 storyboard 中新建一个 ViewController,再新建一个名为 NewViewController 的 cocoa touch class 文件,继承 UIViewController,将新建的 ViewController 绑定到 NewViewController 类上。现在 storyboard 中就有两个 ViewController 了。如图:
之后设计窗体上的控件,在第一个窗体(称为窗体 A)内放一个标签和一个按钮,在第二个窗体(称为窗体 B)内放一个输入框和按钮。将标签和输入框的 outlet 绑定到 swift 文件中,为两个按钮分别添加各自的监听事件。如图:
我们的目标是点击窗体 A 的按钮能够跳转到窗体 B,同时窗体 B 输入框中的内容变成窗体 A 标签内的文字,在修改输入框中的内容,再点击按钮,能够跳转回窗体 A,同时窗体 A 标签中的内容变成在窗体 B 的输入框中修改的内容。
我们选中第一个窗体上方三个按钮中的第一个按钮,用拖拽的方式拖到第二个窗体,并在弹出来的选项中选择 show detail。如图
之后就可以看到两个窗体之间新增了一条连接线
选中这条连接线,设置它的 Storyboard Segue 的 Identifier 为 JumpToNew。
在 NewViewController 中应当加一个变量 data 用于存储传来的数据,同时在窗体加载时将 data 的数据放入 textField 中,代码如下:
var data:String?
override func viewDidLoad() {
super.viewDidLoad()
textField1.text = data
}
然后我们在 ViewController 中按钮的监听事件中编写跳转代码,并且再外加一个方法传递数据
// ViewController.swift
@IBAction func jump(_ sender: UIButton) {
self.performSegue(withIdentifier: "JumpToNew", sender: label1.text)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "JumpToNew"{
let controller = segue.destination as! NewViewController
controller.data = sender as? String
}
}
之后运行程序就会发现第二个窗体的 textField 中也显示了 Hello
接下来实现在窗体 B 中修改的内容在窗体 A 中显示,首先在窗体 A 的 swift 文件中新建一个 IBAction 修饰的方法:
@IBAction func back(unwindSegue : UIStoryboardSegue){
let view = unwindSegue.source as! NewViewController
label1.text = view.textField1.text
}
这个方法里的 view 就是指窗体 B,这个方法在从窗体 B 返回窗体 A 时执行
之后将窗体 B 的 Exit 方法绑定到按钮上,选中返回按钮,拖拽到窗体 B 上方第三个按钮(Exit),再选择 backWithUnwindSegue。这个意思就是在点击返回按钮时回到窗体 A,同时窗体 A 中的 back 方法。如图
OK,大功告成
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于