Cap*_*Fim 6 uiviewcontroller ios
我认为这很简单:每当我在应用程序运行时收到远程通知时,都会显示一个带有消息的 UIAlertController。
问题在于,当主应用程序即将推送/呈现另一个视图控制器时,可能会出现该警报。在这种情况下,我会收到丑陋的错误消息,例如
pushViewController:animated: called on <UINavigationController 0x7f400c00> while an existing transition or presentation is occurring; the navigation stack will not be updated.
并且应用程序可能会以这种方式进入不一致的状态。我如何安排视图控制器转换,使它们不会像这样发生冲突?
将控制器分成两个UIWindow可以解决这个问题。您不只是在应用程序的视图控制器之一上显示警报,而是创建一个如下所示的新窗口:
let screen = UIScreen.main
let screenBounds = screen.bounds
let alertWindow = UIWindow(frame: screenBounds)
alertWindow.windowLevel = UIWindowLevelAlert
let vc = UIViewController()
alertWindow.rootViewController = vc
alertWindow.screen = screen
alertWindow.isHidden = false
vc.present(alert, animated: true)
Run Code Online (Sandbox Code Playgroud)
现在,应用程序主窗口中的视图控制器可以同时推送和呈现其他控制器以显示警报。