开发者

how to get my UIWindow using UIApplication?

I have only one window and I tried

UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];

but this returned nil.

开发者_如何学C

I also tried:

UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];

But this raised an exception and the app closed, when I tried to print out

[[UIApplication sharedApplication].windows count]

It printed 0

Note: I am putting this in my only view controller's viewDidLoad method and this is completely a new iPad View Based Application so I changed nothing, just trying to get the window

Please help me to get this object


If your main window is an outlet of your AppDelegate (which should be the case), you may simply use

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]


Easiest way is to get the window from the app delegate instead:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now


Your application's key window isn't set until [window makeKeyAndVisible] gets called in your app delegate. Your UIViewController is probably being loaded from a NIB before this call. This explains why keyWindow is returning nil.

Luckily, your view controller doesn't need to go through UIApplication to get the window. You can just do:

UIWindow *mWindow = self.view.window;


[[[UIApplication sharedApplication] windows] objectAtIndex:0]; // You can also check the count of this to make sure, because if there are no windows it will crash.


With iOS 13+ you should use:

if let currentScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
    let window = currentScene.keyWindow {
    // now window contains the active window
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜