2017-05-03 51 views
2

我想用performSegue如下爲SEGUE不做好準備工作如預期

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

移動到另外的看法,我想表明我的目的地查看警報,所以我準備重寫功能如下

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "successRegistration" { 
      loginModel.alert(fromController: self) 
      print("working") 
     } 
    } 

但準備功能似乎並沒有工作,因爲working沒有打印到控制檯

我試圖消除我prepare功能和改變我的performSegue如下

self.performSegue(withIdentifier: "successRegistration", sender: self.loginModel.alert(fromController: self)) 

上述行並打印警報,但它並沒有帶我去其他視圖。

如何在顯示其他視圖後顯示警報?

+0

您應該在目標視圖控制器的「viewDidAppear」中顯示警報,或顯示警報,然後在警報解除後執行警戒。你不能同時 – Paulw11

+0

@ Paulw11試圖在此刻實施它,謝謝你的建議 –

回答

4

目的地視圖控制器上顯示警報在準備將導致:

"Attempt to present UIAlertController on SecondViewController whose view is not in the window hierarchy!" 

達到你想要什麼,你可以簡單地在你的第二個視圖控制器中加一個變量類,它默認爲false

//In your second view controller 
var shouldPresentAlertOnOpen: Bool = false 

然後,你可以添加邏輯,以顯示該視圖控制器viewWillAppear中方法的警惕,像這樣:

//Still in your second view controller 
override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if shouldPresentAlertOnOpen { 
     //Present your alert here 
     let alert = UIAlertController(title: "My Alert", message: "My awesome message", preferredStyle: .alert) 
     alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 
     self.present(alert, animated: true, completion: nil) 
    } 
} 

現在回到你的第一個視圖控制器,你可以更新您準備方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "successRegistration" { 
     let destinationVC = segue.destination as! SecondViewController 
     destinationVC.shouldPresentAlertOnOpen = true 
    } 
} 

注意SecondViewController應更新到你的第二個視圖控制器類。

我敢肯定還有其他方法可以做到這一點,這只是我的方法。

+0

謝謝,祝你老大! –

0

檢查這一項:

self.performSegue(withIdentifier: "successRegistration", sender: self) 
+0

不幸的工作! –

0

你可以嘗試這樣的:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "successRegistration" { 
      loginModel.alert(fromController: segue.destinationViewController) 
      print("working") 
     } 
} 

像這樣進行賽格瑞:

self.performSegue(withIdentifier: "successRegistration", sender: self) 

這將是,如果你傳遞更加良好根據您嘗試顯示的此值,在destinationViewController上顯示一些值並在下一屏幕上顯示警報。傳遞的值也能像shouldDisplayLoginAlertOnLoad