Ventajas, problemas, ejemplos de agregar otra ventana UI a una aplicación iOS

Recientemente me he estado preguntando sobre el hecho de que una aplicación de iOS solo tiene una UIWindow . No parece ser un problema crear otra UIWindow y colocarla en la pantalla.

Mi pregunta es algo vaga, pero estoy interesado en:

  • ¿Qué podría potencialmente lograr con una segunda UIWindow que no se puede hacer de otras maneras?
  • ¿Qué puede salir mal al usar múltiples instancias de UIWindow ?
  • He visto que las personas usan una segunda UIWindow de UIWindow para mostrar las vistas de UIWindow en el iPhone. ¿Es esta una buena forma de hacerlo? ¿Por qué? Por qué no?
  • ¿Hay otros ejemplos en los que tiene sentido tener otra UIWindow ?

No es que me esté perdiendo algo. Nunca sentí la necesidad de crear otra instancia de UIWindow , ¡pero tal vez permitiría hacer cosas increíbles de las que no soy consciente! 🙂

Espero que me ayude a resolver este problema: necesito agregar una “vista de portada” sobre lo que se muestra actualmente. También debería funcionar si ya hay uno o más controladores modales presentados. Si agrego un UIView a la vista del controlador raíz, los controladores UIView sientan encima, también lo hacen los controladores popover. Si presento la vista de portada modalmente y ya hay un controlador modal, solo se cubre una parte de la pantalla.

Una UIWindow puede flotar sobre otros elementos de la interfaz de usuario como el teclado del sistema.

Para abordar su último párrafo: UIWindow una UIWindow con el mismo marco que su ventana principal. Establezca su propiedad UIWindowLevelStatusBar en UIWindowLevelStatusBar . Establezca su propiedad hidden en NO .

Comenzando con la respuesta de Rob, jugué un poco y me gustaría escribir algunas notas para otros tratando de obtener información sobre este tema:

  • No es ningún problema agregar otra UIWindow . Solo crea uno y makeKeyAndVisible . Hecho.
  • Quítelo haciendo que otra ventana sea visible, luego libere la que ya no necesita.
  • La ventana que es “clave” recibe toda la entrada del teclado.
  • UIWindow cubre todo, incluso modales, popovers, etc. ¡Brillante!
  • UIWindow siempre es retrato implícitamente. No gira Tendrá que agregar un controlador como controlador raíz de la nueva ventana y dejar que eso maneje la rotación. (Al igual que la ventana principal)
  • El nivel de la ventana determina qué tan “alto” se muestra. Establézcalo en UIWindowLevelStatusBar para que cubra todo. Establezca su propiedad hidden en NO.
  • Se puede usar una segunda UIWindow para traer vistas en la pantalla que floten encima de todo. Sin crear un controlador ficticio solo para insertarlo en un UIPopoverController .
  • Puede ser especialmente útil en iPhone donde no hay un controlador de popover, pero en el que puede querer imitar algo así.
  • Y sí, solucionó, por supuesto, mi problema: si la aplicación renuncia a la activación, agregue una ventana de tapa sobre lo que se muestra actualmente para evitar que iOS tome una captura de pantalla del contenido actual de su aplicación.