仅在发生某些事情时才执行 segue
Perform a segue only if something happens
如何仅在条件发生时执行 segue?
我尝试过的:
在 Main.storyboard 我有两个视图控制器。我可以控制从 ViewController.swift 的视图控制器图标拖动到第二个 ViewController.swift 中的任何位置。
I select 带有 segue 和 In Attributes > 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有内容时才转场?
这 answer 解释了您的逻辑。
您可以做的是,在执行 segue 之前检查按钮函数中是否填充了文本字段。
简单的解决方案,最好在调用 performSegue
之前直接检查条件
@IBAction func goTo2(_ sender: UIButton) {
guard !textField1.text!.isEmpty else { return }
performSegue(withIdentifier: "segueTo2", sender: self)
}
delegate 方法实际上只针对hard-connected segues,所以你可以删除它
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?
我尝试过的:
在 Main.storyboard 我有两个视图控制器。我可以控制从 ViewController.swift 的视图控制器图标拖动到第二个 ViewController.swift 中的任何位置。
I select 带有 segue 和 In Attributes > 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有内容时才转场?
这 answer 解释了您的逻辑。
您可以做的是,在执行 segue 之前检查按钮函数中是否填充了文本字段。
简单的解决方案,最好在调用 performSegue
@IBAction func goTo2(_ sender: UIButton) {
guard !textField1.text!.isEmpty else { return }
performSegue(withIdentifier: "segueTo2", sender: self)
}
delegate 方法实际上只针对hard-connected segues,所以你可以删除它
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
}
}