我想使用performSegue转到另一个视图,如下所示
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))上面的行确实打印了警报,但它并没有带我到另一个视图。
在看到另一个视图后,我如何显示警报?
发布于 2017-05-03 12:00:26
在准备中在目标视图控制器上显示警报将导致:
"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应该更新为您的第二个视图控制器类。
我敢肯定你还有其他方法可以做到,这只是我的方法。
发布于 2017-05-03 11:47:04
检查一下这个:
self.performSegue(withIdentifier: "successRegistration", sender: self)发布于 2017-05-03 11:56:39
你可以这样做:
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等。
https://stackoverflow.com/questions/43758928
复制相似问题