首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在swift应用程序中获取keyWindow引用?

如何在swift应用程序中获取keyWindow引用?
EN

Stack Overflow用户
提问于 2014-06-14 08:28:00
回答 7查看 47.4K关注 0票数 31

在Objective-C中,在UIViewController的viewDidLoad方法中,我这样做是为了在我的iOS应用程序中获得keyWindow引用:

代码语言:javascript
复制
 UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];

因此,我将这个视图控制器移植到Swift中,并调用viewDidLoad:

代码语言:javascript
复制
let window = UIApplication.sharedApplication().keyWindow

我在试图理解为什么窗口是空的。当我将断点放在该行后面时,我在控制台中检查window,得到如下结果:

代码语言:javascript
复制
(lldb) po window
nil

如何在swift中使window成为对应用程序keyWindow的有效引用?

EN

回答 7

Stack Overflow用户

发布于 2015-06-08 23:05:00

我是在swift中搜索获取窗口时遇到这个问题的。如果你想得到window而不是keyWindow,试试这个(Swift 2):

代码语言:javascript
复制
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {
    MBProgressHUD.show(text, view:window)
}

为Swift 3更新:(谢谢@Trevor)

代码语言:javascript
复制
if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
    MBProgressHUD.show(text, view:window)
}
票数 40
EN

Stack Overflow用户

发布于 2018-05-30 09:34:17

Swift 4只有UIApplication.shared.keyWindow属性,不需要强制转换。

请注意,iOS 13/iPadOS引入了UIScenes和对多窗口的显式支持,因此弃用了keyWindow的概念,因为它不再有效。

This问题概述了如何访问基于场景的窗口。

票数 25
EN

Stack Overflow用户

发布于 2020-08-31 01:58:25

Swift 5.1

对我很管用

如果您还在寻找一种处理foregroundbackground模式的方法,那么您应该尝试以下方法

代码语言:javascript
复制
UIApplication.shared.windows.first(where: { $0.isKeyWindow })
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24215462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档