как получить мой UIWindow с помощью UIApplication?

У меня только одно окно и я пробовал

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

но это вернуло ноль.

Я также пробовал:

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

Но это вызвало исключение, и приложение закрылось, когда я попытался распечатать

[[UIApplication sharedApplication].windows count]

Он напечатал 0

Примечание. Я помещаю это в метод viewDidLoad моего единственного контроллера представления, и это совершенно новое приложение на основе представления iPad, поэтому я ничего не менял, просто пытаясь получить окно

Пожалуйста, помогите мне получить этот объект


person Community    schedule 23.09.2010    source источник


Ответы (3)


Если ваше главное окно является выходом вашего AppDelegate (что и должно быть), вы можете просто использовать

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
person Phlibbo    schedule 23.09.2010

Самый простой способ - получить окно из делегата приложения:

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

Ключевое окно вашего приложения не будет установлено до тех пор, пока [window makeKeyAndVisible] не будет вызвано в вашем делегате приложения. Ваш UIViewController, вероятно, загружается из NIB перед этим вызовом. Это объясняет, почему keyWindow возвращает ноль.

К счастью, вашему контроллеру представления не нужно проходить через UIApplication, чтобы получить окно. Вы можете просто сделать:

UIWindow *mWindow = self.view.window;
person cduhn    schedule 23.09.2010
comment
Это потому, что представление еще не является частью иерархии представлений. То же самое и в viewWillAppear:. - person tomwhipple; 09.11.2011