【问题标题】:how to get my UIWindow using UIApplication?如何使用 UIApplication 获取我的 UIWindow?
【发布时间】:2010-09-23 19:56:35
【问题描述】:

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

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

但这返回 nil。

我也试过了:

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

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

[[UIApplication sharedApplication].windows count]

它打印了 0

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

请帮我拿到这个物品

【问题讨论】:

    标签: iphone uiwindow uiapplication


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        UIWindow *mWindow = self.view.window;
        

        【讨论】:

        • 那是因为视图还不是视图层次结构的一部分。在 viewWillAppear 中也是如此:。
        【解决方案4】:
        [[[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.
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多