如何仅在条件发生时执行分段?
我尝试过的:
-
在Main.storyboard中,我有两个视图控制器。我有从ViewController.swift的View Controller图标拖动到SecondViewController·斯wift.中的任何位置的控件
-
我选择带有segue的箭头,在属性>标识符中,我将其命名为segueTo2
-
在ViewController.swift中,我有一个textField1和To2按钮。故事板中所有连接的内容。我还有:
@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为空时,它仍然生成segue。
如何使segue只有当文本字段有内容时?
简单的解决方案,最好在调用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
}
}
这个答案解释了您的逻辑发生了什么。
相反,您可以做的是,在执行segue之前,检查按钮函数中是否填写了文本字段。