在UIViewController的viewDidLoad方法中的Objective-C中,我这样做是为了在我的iOS应用程序中获取keyWindow引用:
UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
Run Code Online (Sandbox Code Playgroud)
所以,我将这个视图控制器移植到Swift中,我在viewDidLoad调用中执行此操作:
let window = UIApplication.sharedApplication().keyWindow
Run Code Online (Sandbox Code Playgroud)
我试图理解为什么窗口是零.当我在该行之后放置一个断点时,然后在控制台中检查窗口,我得到了这个:
(lldb) po window
nil
Run Code Online (Sandbox Code Playgroud)
如何让窗口成为swift中我的应用程序的keyWindow的有效引用?
sup*_*org 35
当我在寻找快速获取窗口时,我遇到了这个问题.如果你想获得窗口而不是keyWindow,试试这个:
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}
Run Code Online (Sandbox Code Playgroud)
针对Swift 3进行了更新:(感谢@Trevor)
if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}
Run Code Online (Sandbox Code Playgroud)
juh*_*n_h 14
Swift 4只是拥有UIApplication.shared.keyWindow财产,不需要铸造.
斯威夫特 5.1
为我工作
如果您也在寻找一种处理foreground和background模式的方法,您应该试试这个
UIApplication.shared.windows.first(where: { $0.isKeyWindow })
Run Code Online (Sandbox Code Playgroud)
viewDidLoad 时关键窗口尚未设置。您的代码在 viewDidAppear 中运行良好。或者,您可以在 viewDidLoad 中获取窗口数组,并从该数组中获取一个(如果有多个)窗口。
| 归档时间: |
|
| 查看次数: |
28899 次 |
| 最近记录: |