簡體   English   中英

如何在 Swift 中以編程方式阻止 segue?

[英]How do I stop a segue from going through programmatically in Swift?

這是代碼:

    @IBAction func loginTapped(_ sender: Any) {

    let email = emailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
    let password = passwordTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)

    Auth.auth().signIn(withEmail: email, password: password) { (result, error) in

        if error != nil {
            self.errorLabel.text = error!.localizedDescription
            self.errorLabel.alpha = 1
            print(error!.localizedDescription)
        }
        else {

            self.performSegue(withIdentifier: "loginSegue", sender: nil)

            print("User is signed in with Firebase.")
        }
    }
}

我有一個 segue, loginSegue ,從登錄按鈕連接到homeViewController if error語句中,我想阻止 segue 進行,因為用戶尚未登錄。這里的目標是不允許用戶在收到錯誤時轉發 go。 performSegue(withIdentifier: String, sender: Any?)是否有“對立面”?

我認為您的按鈕已連接以在 storyboard 中執行 segue。 所以你的按鈕有兩個動作 - 一個來自 storyboard 執行 segue 和第二個在你的代碼中。 只需從 storyboard 中刪除連接並僅連接 UIViewControllers 而不是您的按鈕。

首先,performSegue(withIdentifier: String, sender: Any?)沒有對立面?

但問題不在於它。 我想你用登錄按鈕連接了 segue 並給了它一個標識。 如果你直接給一個按鈕一個 segue,按鈕總是會顯示你連接到哪個頁面。 在按鈕動作中做一些操作沒有效果。

您需要將此 segue 添加到 FirstVc 到 SecondVc (而不是按鈕),然后識別此 segue 然后控制何時點擊登錄按鈕。 如果沒有錯誤運行 segue 並給出標識並顯示它。

您可以覆蓋shouldPerformSegue(withIdentifier:,sender:)方法並在登錄失敗並且您不想執行 segue 時返回 false。 這是一個例子

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM