2017-05-03 48 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