我只有一个窗口,我试过
UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];
但是这返回了nil。
我也尝试过:
UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];
但是当我尝试打印
时,这引发了异常,应用程序关闭了[[UIApplication sharedApplication].windows count]
它打印0
注意:我将它放在我唯一的视图控制器的viewDidLoad方法中,这完全是一个新的基于iPad View的应用程序所以我什么都没改变,只是试图获取窗口
请帮我拿到这个对象
答案 0 :(得分:47)
如果您的主窗口是AppDelegate的插座(应该是这种情况),您可以直接使用
MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
答案 1 :(得分:35)
最简单的方法是从应用代理中获取窗口:
UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
答案 2 :(得分:20)
在您的应用代表中调用[window makeKeyAndVisible]
之前,不会设置您的应用程序的关键窗口。您的UIViewController可能在此调用之前从NIB加载。这解释了为什么keyWindow
返回nil。
幸运的是,您的视图控制器无需通过UIApplication来获取窗口。你可以这样做:
UIWindow *mWindow = self.view.window;
答案 3 :(得分:5)
[[[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.