UIAlertController 已完成并呈现,但在 viewDidLoad 期间未出现
UIAlertController is complete and presented but does not appear during viewDidLoad
我将此警报控制器设置为在加载视图控制器后立即显示。但是,它没有出现。
我相信我已经涵盖了所有方面——标题、消息、警报样式、操作按钮和礼物……但仍然没有出现。
不确定我错过了什么。
let array = quoteBank()
print(array.sarcasticQuotes[0].quote)
let title = "Message"
let message = array.sarcasticQuotes[0].quote
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(.init(title: "OK", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
您需要在主线程上执行:
DispatchQueue.main.async {
present(alert, animated: true, completion: nil)
}
这背后的原因是视图控制器的层次结构将在 viewDidLoad
完成后设置。因此,通过这样做,您可以将主线程上的警报显示安排到主线程完成执行 viewDidLoad
.
的时间
尝试在 viewDidLoad
中显示警报为时过早。视图控制器尚未显示。使用 viewDidAppear
.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Use this if statement to only show the alert once
if self.isBeingPresented || self.isMovingToParentViewController {
// show your alert here
}
}
我将此警报控制器设置为在加载视图控制器后立即显示。但是,它没有出现。 我相信我已经涵盖了所有方面——标题、消息、警报样式、操作按钮和礼物……但仍然没有出现。 不确定我错过了什么。
let array = quoteBank()
print(array.sarcasticQuotes[0].quote)
let title = "Message"
let message = array.sarcasticQuotes[0].quote
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
alert.addAction(.init(title: "OK", style: .default, handler: nil))
present(alert, animated: true, completion: nil)
您需要在主线程上执行:
DispatchQueue.main.async {
present(alert, animated: true, completion: nil)
}
这背后的原因是视图控制器的层次结构将在 viewDidLoad
完成后设置。因此,通过这样做,您可以将主线程上的警报显示安排到主线程完成执行 viewDidLoad
.
尝试在 viewDidLoad
中显示警报为时过早。视图控制器尚未显示。使用 viewDidAppear
.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Use this if statement to only show the alert once
if self.isBeingPresented || self.isMovingToParentViewController {
// show your alert here
}
}