UIAlertController已完成并已呈现,但在viewDidLoad期间未出现

时间:2018-10-23 20:49:19

标签: swift uialertcontroller

我将在加载视图控制器后立即显示此警报控制器设置。但是,它不会出现。 我相信我涵盖了所有方面-标题,消息,警报样式,操作按钮和提示...但仍然没有出现。 不确定我缺少什么。

  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 个答案:

答案 0 :(得分:3)

尝试在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
    }
}

答案 1 :(得分:0)

您需要在主线程上执行该操作:

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

其背后的原因是,viewDidLoad完成后将设置视图控制器的层次结构。因此,通过执行此操作,您可以将警报在主线程上的显示调度到主线程从执行viewDidLoad开始完成的时间。