0
我試圖讓一個unwind segue取決於用戶在警報對話框中批准它。但是,當我運行代碼時,對話框會很快出現,消失,然後轉入另一個視圖控制器。我試着讓alertDialog成爲類的實例變量,並沒有什麼不同。下面的代碼在UIViewController子類中。我錯過了什麼?presentViewController在shouldPerformSegueWithIdentifier中不是模態
謝謝。
override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {
var shouldPerformSeque = true
if identifier == "startOver" {
let alertDialog = UIAlertController(title: "Warning",
message: "This will discard all data entered.",
preferredStyle: .Alert)
let okAction = UIAlertAction(title: "OK", style: .Default, handler: nil)
alertDialog.addAction(okAction)
let cancelActionHandler = {
(action: UIAlertAction!) -> Void in
shouldPerformSeque = false
}
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel,
handler: cancelActionHandler)
alertDialog.addAction(cancelAction)
presentViewController(alertDialog, animated: false, completion: nil)
}
return shouldPerformSeque
}
您不能在'shouldPerformSegueWithIndentifier'中執行此操作,因爲該對話框將針對該方法異步呈現;到動作處理程序閉包執行時,方法已經返回。您需要顯示對話框以響應觸發segue的任何內容,然後根據用戶的響應以編程方式執行展開 – Paulw11
@ Paulw11,這應該是一個答案。 –
謝謝。我有這個工作使用提供的解決方案。但是,當我從故事板編輯器中的退出segue斷開按鈕動作時,它刪除了我的seque。我不得不添加一個連接到seque的殘疾和隱藏故事板按鈕來保留它。 – user2129643