UIAlertController 未按预期运行
Posted
技术标签:
【中文标题】UIAlertController 未按预期运行【英文标题】:UIAlertController Not Behaving as expected 【发布时间】:2020-10-05 13:59:29 【问题描述】:我正在尝试从 ViewController A 切换到 ViewController B,并在 ViewController B 中显示带有 UIAlertController
的消息。
在我的 ViewController B 中,我通常会在 viewDidLoad()
中显示这样的消息:
let alertMessage = String(format: "This is an alert!!")
let alertController = UIAlertController(title: "Error!!", message: "This is an alert!!", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: .default))
self.present(alertController, animated: true, completion: nil)
我像这样从 A 切换到 B:
let storyBoard:UIStoryboard = UIStoryboard(name:"Main",bundle:nil)
let nextViewController = storyBoard.instantiateViewController(withIdentifier: "ViewControllerB") as! ViewControllerTypeB
self.present(nextViewController, animated:false, completion:nil)
当我将代码保留在 ViewController B 的 viewDidLoad()
中时,我的警报不会出现,并且 View Controller B 已成功切换到。我尝试的另一件事是将 ViewController B 的 viewDidLoad()
中的代码更改为:
let alertMessage = String(format: "This is an alert!!")
let alertController = UIAlertController(title: "Error!!", message: "This is an alert!!", preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "Dismiss", style: .default))
UIApplication.shared.keyWindow?.rootViewController!.present(alertController, animated: true,
completion: nil)
现在在这种情况下,当调用从 A 到 B 的代码时,我会看到视图控制器 A 顶部显示的警报,而视图控制器 B 永远不会切换到。
实现此目的的正确方法是什么?
【问题讨论】:
你不应该尝试present
viewDidLoad()
中的视图控制器。在viewDidAppear
试试吧。
控制台中没有消息吗?关于呈现不在视图层次结构中,或者已经呈现?
@DonMag 谢谢!这正是我所需要的!现在表现如预期
【参考方案1】:
调用UIViewController
的viewDidLoad
,不是在显示视图控制器时,而是在它加载到内存中时。如果您希望在 ViewControllerB 中显示警报,则需要使用 viewDidAppear
方法来显示警报。
如果 ViewControllerB 不是层次结构中的最后一个控制器,则可能会出现这样的问题,即当您导航到 ViewControllerC 后返回 ViewControllerB 时会再次显示警报。在这种情况下,您可以维护一个 Bool
属性,该属性可以跟踪 ViewControllerB 是否第一次出现。
【讨论】:
以上是关于UIAlertController 未按预期运行的主要内容,如果未能解决你的问题,请参考以下文章