У меня эта настройка контроллера предупреждений появляется, как только загружается контроллер представления. Однако этого не происходит. Я считаю, что у меня есть все аспекты - заголовок, сообщение, стиль предупреждения, кнопка действия и настоящее ... но все еще не появляется. Не уверен, что мне не хватает.
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)
2 ответа
Пытаться показать предупреждение в 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
}
}
Вам нужно выполнить это в основном потоке:
DispatchQueue.main.async {
present(alert, animated: true, completion: nil)
}
Причина в том, что иерархия контроллера представления будет установлена после завершения viewDidLoad
. Таким образом, делая это, вы планируете представление предупреждения в основном потоке до того момента, когда основной поток завершит выполнение viewDidLoad
.
Новые вопросы
swift
Swift - это безопасный, быстрый и выразительный язык программирования общего назначения, разработанный Apple Inc. для своих платформ и Linux. Swift с открытым исходным кодом. Используйте тег только для вопросов о языковых функциях или необходимости кода в Swift. Используйте теги [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] и [cocoa] для (не зависящих от языка) вопросов о платформах или фреймворках.