Vantagens, problemas, exemplos de adicionar outra interface do usuário a um aplicativo iOS?

Recentemente, tenho me perguntado sobre o fato de que um aplicativo para iOS tem apenas uma UIWindow . Não parece ser um problema criar outra UIWindow e colocá-la na canvas.

Minha pergunta é meio vaga, mas estou interessado em:

  • O que eu poderia conseguir com uma segunda UIWindow que não pode ser feita de outras maneiras?
  • O que pode dar errado ao usar várias instâncias da UIWindow ?
  • Eu vi que as pessoas usam um segundo UIWindow para exibir popover como visualizações no iPhone. Esta é uma boa maneira de fazer isso? Por quê? Por que não?
  • Existem outros exemplos em que está fazendo sentido ter outra UIWindow ?

Não é que eu esteja perdendo alguma coisa. Eu nunca senti a necessidade de criar outra instância UIWindow mas talvez permitiria fazer coisas incríveis que eu não conheço! 🙂

Eu espero que isso me ajude a resolver este problema: Eu preciso adicionar uma “visão de capa” sobre o que estiver sendo exibido atualmente. Ele também deve funcionar se já houver um ou mais controladores modais apresentados. Se eu adicionar um UIView à exibição do controlador raiz, os controladores modais ficarão no topo, assim como os controladores popover. Se eu apresentar a vista da capa de forma modal e já houver um controlador modal, apenas parte da canvas será coberta.

Um UIWindow pode flutuar acima de outros elementos da interface do usuário, como o teclado do sistema.

Para endereçar seu último parágrafo: Crie uma UIWindow com o mesmo quadro da janela principal. Defina sua propriedade UIWindowLevelStatusBar como UIWindowLevelStatusBar . Defina sua propriedade hidden como NO .

Começando com a resposta de Rob, eu brinquei um pouco e gostaria de escrever algumas notas para outros tentando obter informações sobre este tópico:

  • Não é um problema para adicionar outro UIWindow . Basta criar um e makeKeyAndVisible . Feito.
  • Remova-o, deixando outra janela visível, depois solte a que você não precisa mais.
  • A janela que é “chave” recebe toda a input do teclado.
  • UIWindow abrange tudo, até mesmo modais, popovers, etc. Brilhante!
  • UIWindow é sempre retrato implicitamente. Não gira. Você precisará adicionar um controlador como o controlador raiz da nova janela e deixar que ele manipule a rotação. (Assim como a janela principal)
  • O nível da janela determina como “alto” é exibido. Configure-o para UIWindowLevelStatusBar para que ele cubra tudo. Defina sua propriedade hidden como NO.
  • Um segundo UIWindow pode ser usado para trazer exibições na canvas que flutuam sobre tudo. Sem criar um controlador fictício apenas para incorporar isso em um UIPopoverController .
  • Pode ser especialmente útil no iPhone, onde não há controlador popover, mas onde você pode querer imitar algo parecido.
  • E, claro, isso resolveu meu problema: se o aplicativo renunciar à ativação, adicione uma janela de cobertura sobre o que está sendo mostrado atualmente para impedir que o iOS tire uma captura de canvas do conteúdo atual de seu aplicativo.