Преимущества, проблемы, примеры добавления другого UIWindow в приложение iOS?

Недавно мне стало интересно, что приложение iOS имеет только один UIWindow . Кажется, что это не проблема для создания другого UIWindow и размещения его на экране.

Мой вопрос нечеткий, но меня интересует:

  • Что я могу достичь с помощью второго UIWindow который не может быть выполнен другими способами?
  • Что может испортиться при использовании нескольких экземпляров UIWindow ?
  • Я видел, что люди используют второй UIWindow чтобы отображать popover как виды на iPhone. Это хороший способ сделать это? Зачем? Почему нет?
  • Существуют ли другие примеры, когда совершенно необходимо иметь еще один UIWindow ?

Дело не в том, что я что-то пропускаю. Я никогда не чувствовал необходимости создавать еще один экземпляр UIWindow но, возможно, это позволит делать потрясающие вещи, о которых я не знаю! 🙂

Я надеюсь, что это может помочь мне решить эту проблему: мне нужно добавить «обложку» над тем, что в данный момент отображается. Он также должен работать, если уже есть один или несколько модальных controllerов. Если я добавлю UIView в представление корневого controllerа, модальные controllerы будут сидеть сверху, так же как и controllerы popover. Если я представляю вид крышки по-модулю, и уже есть модальный controller, покрывается только часть экрана.

UIWindow может плавать над другими элементами интерфейса, такими как системная клавиатура.

Чтобы обратиться к вашему последнему абзацу: Создайте UIWindow с тем же фреймом, что и ваше главное окно. Установите windowLevel свойства windowLevel значение UIWindowLevelStatusBar . Установите для hidden свойства значение NO .

Начиная с ответа Роба я немного поиграл и хотел бы записать несколько заметок для других, пытающихся получить информацию по этой теме:

  • Совсем не проблема добавить еще один UIWindow . Просто создайте один и makeKeyAndVisible . Готово.
  • Удалите его, сделав еще одно окно видимым, затем отпустите тот, который вам больше не нужен.
  • Окно, которое является «ключом», получает весь ввод клавиатуры.
  • UIWindow охватывает все, даже модалы, popovers и т. Д. Блестящий!
  • UIWindow всегда является портретом неявно. Он не вращается. Вам нужно будет добавить controller в качестве корневого controllerа нового windows и разрешить его rotation. (Как и в главном окне)
  • Уровень windows определяет, как «высокий» он отображается. Установите его в UIWindowLevelStatusBar чтобы он покрыл все. Установите для hidden свойства значение НЕТ.
  • Второй UIWindow можно использовать, чтобы отображать на экране, которые плавают поверх всего. Не создавая фиктивный controller, чтобы встроить его в UIPopoverController .
  • Это может быть особенно полезно на iPhone, где нет controllerа popover, но где вы можете подражать чему-то подобному.
  • И да, она решила, конечно, мою проблему: если приложение уходит в отставку, добавьте окно обложки поверх того, что в настоящее время отображается, чтобы запретить iOS делать снимок экрана текущего содержимого вашего приложения.
  • Cocoa Touch: как изменить цвет и толщину границ UIView?
  • Есть ли способ указать позицию / индекс аргумента в NSString stringWithFormat?
  • Как проверить программно, если приложение установлено?
  • iOS: конвертировать UTC NSDate в локальный часовой пояс
  • Как написать данные в plist?
  • Получение времени, прошедшего в Objective-C
  • Могу ли я передать блок как @selector с Objective-C?
  • Есть ли iPhone SDK API для твиттера?
  • Изучение основ UIScrollView
  • UIPageViewController не возвращает никаких распознавателей жестов в iOS 6
  • Лучший способ заставить NSRunLoop ждать установки флага?
  • Давайте будем гением компьютера.