Ios 只有在发生事情时才执行一个序列
如何仅在条件发生时执行分段 我所尝试的:Ios 只有在发生事情时才执行一个序列,ios,swift,storyboard,Ios,Swift,Storyboard,如何仅在条件发生时执行分段 我所尝试的: 在Main.storyboard中,我有两个视图控制器。我已将控件从ViewController.swift的视图控制器图标拖动到SecondViewController.swift中的任意位置 我选择带有segue的箭头,并在属性>标识符中给它命名为segueTo2 在ViewController.swift中,我有一个文本字段1和按钮totot2。故事板中的所有连接。我还有: @IBOutlet weak var textField1: UITex
- 在Main.storyboard中,我有两个视图控制器。我已将控件从ViewController.swift的视图控制器图标拖动到SecondViewController.swift中的任意位置
- 我选择带有segue的箭头,并在属性>标识符中给它命名为segueTo2
- 在ViewController.swift中,我有一个文本字段1和按钮totot2。故事板中的所有连接。我还有:
}@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 }
相反,您可以做的是,在执行segue之前检查按钮函数中的文本字段是否已填充。简单的解决方案是,在调用
performsgue
@IBAction func goTo2(_ sender: UIButton) {
guard !textField1.text!.isEmpty else { return }
performSegue(withIdentifier: "segueTo2", sender: self)
}
委托方法实际上仅适用于硬连接的分段,因此可以将其删除
这更令人困惑!现在我意识到,在iOS中,如果我在按钮中输入if-else,我就不需要shouldPerformSegue。在macOS中,我需要shouldPerformSegue,我必须将if-else放在那里。如果我帮助解决了您的问题,请标记为答案。这有帮助,但不能解决问题。建议的答案不能解释我的情况。你的意思是在iOS中不需要执行segue吗?为什么它在macOS中是必需的?当您在代码中调用performsguewithidentifier时,不会调用shouldPerformSegue。为什么是否定点。我搜索了很多次,但没有人解释这一点。我需要做些什么来改进这个问题?iOS就是这样。为什么不使用macOS?正如我所说,如果我在macOS中只使用if或guard,即使文本字段为空,它也会使segue变为空。如果我使用我提到的所有代码,包括shouldPerformSegue,它将在所有情况下工作
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
}
}