[英]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.