In Objective-C in the viewDidLoad method of a UIViewController I do this to get the keyWindow reference in my iOS app:
UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow];
So, I am porting this view controller into Swift and I do this one the viewDidLoad call:
let window = UIApplication.sharedApplication().keyWindow
I am trying to understand why the window is nil. When I put a breakpoint right after that line I then inspect window in the console and I get this:
(lldb) po window
nil
How can I get window to be a valid reference to the keyWindow of my application in swift?
I came to this question when I was searching for getting window in swift. If you want to get window instead of keyWindow, try this (Swift 2):
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}
Updated for Swift 3: (Thanks @Trevor)
if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view:window)
}
Swift 4 simply has UIApplication.shared.keyWindow
property, no casting necessary.
Note that iOS 13/iPadOS introduces UIScenes
and explicit support for multiple windows, and thus deprecates the concept of keyWindow
as it is no longer valid.
This question has an overview how to get access to scene based windows.
Swift 5.1
Works for me
If you are also looking for a way to deal with foreground
and background
modes you should try this
UIApplication.shared.windows.first(where: { $0.isKeyWindow })
Updating superarts.org's answer for Swift 3:
if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window {
MBProgressHUD.show(text, view: window)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With