У вас есть два способа проверить, следует ли вам переходить на основе вашего кода.
Метод перехода № 1 (iOS и MacOS)
@IBAction func goTo2(_ sender: UIButton) {
if !textField1.text.isEmpty {
performSegue(withIdentifier: "segueTo2", sender: self)
}
print ("text field is empty. Do not do the segue")
}
Метод перехода № 2 (iOS и MacOS)
@IBAction func goTo2(_ sender: Any) {
performSegue(withIdentifier: "segueTo2", sender: self)
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if !textField1.stringValue.isEmpty {
return true
}
print ("it is empty")
return false
}
Как видите , оба Method #1
и Method #2
, похоже, делают одно и то же, но это не так. В Method #1
вы проверяете, пуст ли он ПЕРЕД переходом. В Method #2
вы проверяете, следует ли переходить ПОСЛЕ вызова перехода.
Любой из этих методов работает, и существует масса обходных путей. Самая большая разница в том, что выполнение Method #1
заставляет вас упускать определенные возможности для запуска других методов, таких как prepareForSegue(...)
, что означает, что вы можете пропустить событие жизненного цикла. Однако вы все равно можете использовать prepareForSegue(...)
, просто вы не можете использовать его до срабатывания перехода.
Короче говоря, для ваших целей, исходя из текущего кода, вообще нет смысла использовать Method #2
. Если, однако, вам нужно выполнить какую-то функцию ПОСЛЕ перехода, но И все же остановить переход, если какое-то условие не выполняется, вы должны использовать Method #2
, но даже это может иметь обходной путь.