Подтвердить что ты не робот

Получить главное окно приложения

UIApplication имеет метод keyWindow, однако, если отображается представление предупреждения, это возвращает окно представления предупреждения, а не главное окно приложения.

Как получить главное окно приложения?

4b9b3361

Ответ 1

UIApplicationDelegate обычно имеет ссылку на "главное окно":

[[[UIApplication sharedApplication] delegate] window];

Кроме того, UIApplication имеет массив окон [[UIApplication sharedApplication] windows].

См. Ссылка на класс UIApplication.

Ответ 2

Я не уверен на 100%, что это работает в каждом случае, но это должно работать:

UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];

Окна упорядочиваются назад, поэтому главное окно всегда должно быть в индексе 0.

Ответ 3

UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];

Я не уверен, но это может помочь.

Ответ 4

В Swift:

UIApplication.sharedApplication().delegate?.window

Ответ 5

Swift 3.0 версия rmaddy answer:

let window = UIApplication.shared.windows.first

Я также должен добавить, что, поскольку iOS 8.0 UIAlertController заменил UIAlertView и, будучи контроллером вида, вы больше не сталкиваетесь с проблемой создания новых окон.

Ответ 6

Для меня я представлял popViewController

self.presentViewController(popViewController, animated: true, completion: nil)

а затем в viewDidLoad() этого popViewController я добавлял subview, это вызывает ошибку в консоли и ошибку отображения. Поэтому я должен найти другое решение, чтобы заставить его работать. Надеюсь, это поможет.

Ответ 7

Swift 3

    if let window = NSApplication.shared().windows.first {
        // you can now modify window attributes
    }

Ответ 8

Swift 3

class func sharedInstance() -> AppDelegate{
        return UIApplication.shared.delegate as! AppDelegate
    }