我想使用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))
以上一行确实打印了警报,但没有把我带到另一个视图。
如何在转到其他视图后显示警告?
答案 0 :(得分: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应该更新到第二个视图控制器类。
我很确定还有其他方法可以做到,这只是我的方法。
答案 1 :(得分:0)
检查一下:
self.performSegue(withIdentifier: "successRegistration", sender: self)
答案 2 :(得分:0)
您可以尝试这样:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "successRegistration" {
loginModel.alert(fromController: segue.destinationViewController)
print("working")
}
}
并执行这样的segue:
self.performSegue(withIdentifier: "successRegistration", sender: self)
如果您将一些值传递给destinationViewController,并根据您尝试显示的值在下一个屏幕上显示警报,那将更加出色。传递的值可能类似于shouldDisplayLoginAlertOnLoad
等。