如何使用UIApplication获取我的UIWindow?

时间:2010-09-23 19:56:35

标签: iphone uiwindow uiapplication

我只有一个窗口,我试过

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

但是这返回了nil。

我也尝试过:

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

但是当我尝试打印

时,这引发了异常,应用程序关闭了
[[UIApplication sharedApplication].windows count]

它打印0

注意:我将它放在我唯一的视图控制器的viewDidLoad方法中,这完全是一个新的基于iPad View的应用程序所以我什么都没改变,只是试图获取窗口

请帮我拿到这个对象

4 个答案:

答案 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.