簡體   English   中英

Swift prepareForSegue 取消

[英]Swift prepareForSegue cancel

我正在嘗試實現一個登錄屏幕,當點擊登錄時,它會執行“登錄”。

我添加了一個 prepareForSegue() 覆蓋來嘗試在登錄失敗時取消它,但我沒有看到任何方法來取消如果出現失敗的 segue。

做這個的最好方式是什么?

如果登錄失敗,您應該覆蓋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
}

// 擴展

如果您以編程方式調用 performSegueWithIdentifier,則不會調用此方法,但不需要,您可以僅在登錄成功時調用它,否則忽略它:

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

您可以從 View Controller 執行 segue,而不是從指定的按鈕。 您可以通過從故事板 VC 頂部的黃色按鈕按住 ctrl 拖動來完成此操作。 記得給 segue 一個標識符!

然后你可以從登錄按鈕創建一個 IBAction 函數並執行 performSegueWithIdentifier。 它應該是這樣的:

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

然后,在 prepare(:) 中,您可以為 segue 進行額外的設置,因為它將在實際 segue 發生之前被調用。

您可以使用shouldPerformSegue並返回 false,從而阻止所有 segue。 例如:

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    return false 
}

然后,一旦您成功登錄,請調用 performSegue,如下所示:

performSegue(withIdentifier: "YourSegueIdentifier", sender: nil)

這將確保您只有在登錄成功時才會轉換到控制器。

暫無
暫無

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

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