只有在发生某些事情时才执行分段



如何仅在条件发生时执行分段?

我尝试过的:

  • 在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之前,检查按钮函数中是否填写了文本字段。

最新更新