在不使用AppDelegate的情况下获取UIWindow



我需要直接向窗口添加一个视图。我可以通过UIApplication访问AppDelegate上的窗口对象来实现这一点。我打算让这段代码尽可能地可重用,尽管这使得该方法毫无帮助。如何在不使用AppDelegate的情况下以编程方式访问UIWindow?

我正在用Swift进行编码,但Objective-C示例可能也会有所帮助。

好吧,我自己想好了。你可以这样访问它:

var window : UIWindow = UIApplication.sharedApplication().keyWindow

Swift 5:

var window : UIWindow = UIApplication.shared.keyWindow

请注意,keyWindow在iOS 13.0中已弃用。如果您的目标是iOS 13.0或更高版本,请参阅此。

任何视图都有对当前窗口的引用。

在UIViewController中:

self.view.window

以下内容适用于Swift 4,并将安全地打开UIWindow,这样就不需要强制铸造:

if let window = UIApplication.shared.keyWindow { 
    // Do stuff
}

Swift 3版本:

let window :UIWindow = UIApplication.shared.keyWindow!

您获得的第一个窗口带有:

let window = UIApplication.shared.windows[0]

最新更新