【发布时间】:2014-10-17 14:15:34
【问题描述】:
我需要直接向窗口添加一个视图。我可以通过 UIApplication 访问 AppDelegate 上的窗口对象来做到这一点。我打算使此代码尽可能可重用,但这会使该方法无用。如何在不使用 AppDelegate 的情况下以编程方式访问 UIWindow?
我正在使用 Swift 进行编码,但 Objective-C 示例也可能会有所帮助。
【问题讨论】:
我需要直接向窗口添加一个视图。我可以通过 UIApplication 访问 AppDelegate 上的窗口对象来做到这一点。我打算使此代码尽可能可重用,但这会使该方法无用。如何在不使用 AppDelegate 的情况下以编程方式访问 UIWindow?
我正在使用 Swift 进行编码,但 Objective-C 示例也可能会有所帮助。
【问题讨论】:
好的,这是我自己想出来的。你可以这样访问它:
var window : UIWindow = UIApplication.sharedApplication().keyWindow
斯威夫特 5:
var window : UIWindow = UIApplication.shared.keyWindow
请注意,keyWindow 在 iOS 13.0 中已弃用。
如果您的目标是 iOS 13.0 或更高版本,refer to this。
【讨论】:
任何视图都有对当前窗口的引用。
在 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]
【讨论】: