关于iPhone:如何使用UIApplication获取UIWindow?

how to get my UIWindow using UIApplication?

我只有一个窗口,我尝试了

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

但这返回零。

我也尝试过:

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

但这引发了一个异常,当我尝试打印时,应用程序关闭了

1
[[UIApplication sharedApplication].windows count]

印0

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

请帮我得到这个物体


如果主窗口是AppDelegate的出口(应该是这种情况),则可以简单地使用

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

最简单的方法是从应用程序委托获取窗口:

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

在应用程序委托中调用[window makeKeyAndVisible]之前,不会设置应用程序的键窗口。 在此调用之前,可能已从NIB加载了UIViewController。 这解释了为什么keyWindow返回nil。

幸运的是,您的视图控制器无需通过UIApplication即可获取窗口。 您可以这样做:

1
UIWindow *mWindow = self.view.window;


1
[[[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.