Swift 3,Xcode 8.1。我想在UIViewController
中顯示UIAlertController
。iOS。嘗試在其視圖不在窗口層次結構中的UIViewController上呈現UIAlertController
我有方法:
private static func rootViewController() -> UIViewController {
// cheating, I know
return UIApplication.shared.keyWindow!.rootViewController!
}
static func presentAlert(_ message: String) {
let alertView = UIAlertController(title: "RxExample", message: message, preferredStyle: .alert)
alertView.addAction(UIAlertAction(title: "OK", style: .cancel) { _ in })
rootViewController().present(alertView, animated: true, completion: nil)
}
Full code of this class you can find here
我調用該方法presentAlert在viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
DefaultWireframe.presentAlert("test")
...
}
,並得到了警告:
警告:在試圖在UIViewController上呈現UIAlertController:0x7f904ac0d930:0x7f904ad08040其視圖不在窗口層次結構中!
如何避免該警告並顯示報警?
它起作用時,我試圖在初始ViewController中顯示警報,但它不起作用的另一個ViewController連接使用初始VC推push segue連接。
你確定,那'rootViewController'上你想呈現'UIAlertController'是可見的,而不是覆蓋例如另一個模式視圖控制器? – dive
在此viewController上按下調試視圖按鈕(它位於調試控制檯上的欄中)。在左側,你會看到你的整個視圖堆棧頂部的窗口。您可以右鍵單擊任何視圖以打印說明。將此與rootViewController()的視圖進行比較;必須證明您的rootViewController視圖不再處於層次結構中。選擇一個視圖並使用它。 –
找到任何解決方案?遇到同樣的問題。 –