Подтвердить что ты не робот

Swift prepareForSegue отменить

Я пытаюсь реализовать экран входа в систему, когда нажимается логин, он выполняет "вход в систему".

Я добавил переопределение prepareForSegue(), чтобы попытаться отменить его, если логин завершился неудачно, но я не вижу никакого способа отменить segue, если есть сбой.

Каков наилучший способ сделать это?

4b9b3361

Ответ 1

Вы должны переопределить shouldPerformSegueWithIdentifier и вернуть false, если сбой входа:

override func shouldPerformSegueWithIdentifier(identifier: String?, sender: AnyObject?) -> Bool {
    if let ident = identifier {
        if ident == "YourIdentifier" {
             if loginSuccess != true {
                  return false
             }
         }
     }
     return true
}

ОБНОВЛЕНО ДЛЯ SWIFT 3 Метод Swift 3 теперь называется shouldPerformSegue

    override func shouldPerformSegue(withIdentifier identifier: String?, sender: Any?) -> Bool {
    if let ident = identifier {
        if ident == "YourIdentifier" {
            if loginSuccess != true {
                return false
            }
        }
    }
    return true
}

//Extended

Если вы программно вызываете функцию performSegueWithIdentifier, этот метод не будет вызываться, но для этого он не нужен, вы можете назвать его только своим успехом входа в систему, иначе проигнорируйте его:

if loginSuccess {
    performSegueWithIdentifier("login", sender: nil)
}

Ответ 2

Вы можете сделать segue из контроллера View, а не с указанной кнопки. Вы делаете это путем ctrl-перетаскивания с желтой кнопки на верхней части VC на раскадровке. Не забудьте указать идентификатор segue!

Затем вы можете создать функцию IBAction из кнопки входа и выполнить функциюSegueWithIdentifier. Он должен выглядеть примерно так:

@IBAction func loginButtonTapped(sender: UIButton) {
    if loginSuccess {
        performSegue(withIdentifier: "login", sender: nil)
    }
}

тогда в prepare (:) вы можете выполнить дополнительную настройку для segue, так как он будет вызываться до того, как произойдет фактический segue.