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


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

мой вопрос немного расплывчатый, но меня интересует:

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

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

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

2 82

2 ответа:

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

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

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

  • это не проблема, чтобы добавить еще один UIWindow. Просто создайте один и makeKeyAndVisible. Сделанный.
  • удалите его, сделав видимым другое окно, а затем отпустите тот, который вам больше не нужен.
  • окно, которое является "ключом", получает весь ввод с клавиатуры.
  • UIWindow охватывает все, даже модал, эклеры и т. д. Блестяще!
  • UIWindow всегда портрет неявно. Он не вращается. Вам нужно будет добавить контроллер в качестве корневого контроллера нового окна и позволить ему обрабатывать вращение. (Как в главном окне)
  • уровень окна определяет, как" высокий " он отображается. Установите его в UIWindowLevelStatusBar чтобы он покрывал все. Установите его hidden свойство "нет".
  • 2-й UIWindow может использоваться для отображения видов на экране, которые плавают поверх всё. Без создания фиктивного контроллера просто встроить это в UIPopoverController.
  • это может быть особенно полезно на iPhone, где нет контроллера popover, но где вы можете имитировать что-то подобное.
  • и да, это решило, конечно, мою проблему: если приложение отказывается от активации, добавьте окно обложки над тем, что в настоящее время показано, чтобы предотвратить iOS от снятия скриншота текущего содержимого вашего приложения.