在Objective-C中,在UIViewController的viewDidLoad方法中,我这样做是为了在我的iOS应用程序中获得keyWindow引用:
UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];因此,我将这个视图控制器移植到Swift中,并调用viewDidLoad:
let window = UIApplication.sharedApplication().keyWindow我在试图理解为什么窗口是空的。当我将断点放在该行后面时,我在控制台中检查window,得到如下结果:
(lldb) po window
nil如何在swift中使window成为对应用程序keyWindow的有效引用?
发布于 2015-06-08 23:05:00
我是在swift中搜索获取窗口时遇到这个问题的。如果你想得到window而不是keyWindow,试试这个(Swift 2):
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}为Swift 3更新:(谢谢@Trevor)
if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}发布于 2018-05-30 09:34:17
Swift 4只有UIApplication.shared.keyWindow属性,不需要强制转换。
请注意,iOS 13/iPadOS引入了UIScenes和对多窗口的显式支持,因此弃用了keyWindow的概念,因为它不再有效。
This问题概述了如何访问基于场景的窗口。
发布于 2020-08-31 01:58:25
Swift 5.1
对我很管用
如果您还在寻找一种处理foreground和background模式的方法,那么您应该尝试以下方法
UIApplication.shared.windows.first(where: { $0.isKeyWindow })https://stackoverflow.com/questions/24215462
复制相似问题