У меня эта настройка контроллера предупреждений появляется, как только загружается контроллер представления. Однако этого не происходит. Я считаю, что у меня есть все аспекты - заголовок, сообщение, стиль предупреждения, кнопка действия и настоящее ... но все еще не появляется. Не уверен, что мне не хватает.

  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)
0
Jon Gardocki 23 Окт 2018 в 23:49

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
    }
}
3
rmaddy 23 Окт 2018 в 21:06

Вам нужно выполнить это в основном потоке:

DispatchQueue.main.async {
    present(alert, animated: true, completion: nil)
}

Причина в том, что иерархия контроллера представления будет установлена после завершения viewDidLoad. Таким образом, делая это, вы планируете представление предупреждения в основном потоке до того момента, когда основной поток завершит выполнение viewDidLoad.

0
Moe 27 Окт 2018 в 16:17
52957630