在 UIAlertController 等应用程序中随处显示弹出窗口

Show popup everywhere in app like UIAlertController

我有一个弹出窗口 class 用于在我的整个应用程序中显示一些消息。 我必须初始化一个实例并将其添加为当前出现的控制器的子级,然后在需要时显示弹出视图:

func popMessage() {
    let popup = MyPopup()
    self.addChildViewController(popup)
    self.view.addSubView(popup.view)
    popup.didMoveToParentViewController(self)

    popup.show()
}

有时当前视图控制器嵌入在UINavigationControllerUITabBarController中。 如果要使我的弹出视图以整个屏幕大小显示而不被导航栏或标签栏裁剪,我必须将其添加为导航控制器或标签栏控制器的子项。当我决定更改控制器层次结构时,这很烦人。

我怎样才能像使用 UIAlertViewController 那样更轻松:

let popup = MyPopup()
popup.show() 
or 
self.presentViewController(popup)

将它弹出到任何地方并使其成为屏幕上的唯一焦点,而不考虑弹出窗口应该具有哪个父视图控制器?

您可以在应用程序 window 的根视图控制器上显示弹出窗口。

let popUp = MyPopup()
let appDelegate = UIApplication.sharedApplication().delegate  as! AppDelegate
let appWindow = appDelegate.window
var topViewController = window?.rootViewController

    while topViewController?.presentedViewController != nil
    {
        topViewController = topViewController?.presentedViewController
    }

topViewController.presentViewController(popUp, animated: true, completion: nil)