如何使用UIApplication获取我的UIWindow?

43 iphone uiwindow uiapplication

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

UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];
Run Code Online (Sandbox Code Playgroud)

但这回到了零.

我也尝试过:

UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)

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

[[UIApplication sharedApplication].windows count]
Run Code Online (Sandbox Code Playgroud)

它打印0

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

请帮我搞定这个对象

Phl*_*bbo 48

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

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
Run Code Online (Sandbox Code Playgroud)


iwa*_*bed 37

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

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
Run Code Online (Sandbox Code Playgroud)


cdu*_*uhn 20

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

幸运的是,您的视图控制器不需要通过UIApplication来获取窗口.你可以这样做:

UIWindow *mWindow = self.view.window;
Run Code Online (Sandbox Code Playgroud)

  • 那是因为视图还不是视图层次结构的一部分.在viewWillAppear中也是如此: (6认同)

Bad*_*ate 6

[[[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.
Run Code Online (Sandbox Code Playgroud)