如何只在条件发生时执行转场?
我已经尝试过了。
在Main.storyboard中,我有两个视图控制器。我有控制从ViewController.swift的View Controller图标拖到SecondViewController.swift的任何地方。
我选择了带有分道符的箭头,并在属性> Identifier中给它命名为segueTo2。
在ViewController.swift中,我有一个textField1和toTo2按钮。都连接在故事板中。我也有:
@IBOutlet weak var textField1: UITextField!
@IBAction func goTo2(_ sender: UIButton) {
performSegue(withIdentifier: "segueTo2", sender: self)
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
let str: String? = textField1.text
if str!.isEmpty {
print ("text field is empty. Do not do the segue")
return false
}
else {
return true
}
}
同样的代码在macOS中也能很好地工作(只需将textField1.text改为textField1.stringValue)。在iOS中,它不工作。也就是说,当textField1为空时,它仍然会进行转场。
如何只在Text Field有内容时才进行转场?
这个 回答 解释了你的逻辑发生了什么。
你可以做的是,在执行转场之前,先检查按钮函数里面的文本字段是否被填满。
简单的解决方案,好的做法是直接在调用 performSegue
@IBAction func goTo2(_ sender: UIButton) {
guard !textField1.text!.isEmpty else { return }
performSegue(withIdentifier: "segueTo2", sender: self)
}
委托方法其实只针对 硬连接 转场,所以你可以删除它
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
let str: String? = textField1.text
if str!.isEmpty {
print ("text field is empty. Do not do the segue")
return false
}
else {
return true
}
}