Avantages, problèmes, exemples d’ajout d’une autre UIWindow à une application iOS?

Récemment, je me suis interrogé sur le fait qu’une application iOS ne possède qu’une seule UIWindow . Cela ne semble pas être un problème pour créer une autre UIWindow et la placer à l’écran.

Ma question est assez vague, mais je suis intéressé par:

  • Qu’est-ce que je pourrais potentiellement réaliser avec une deuxième UIWindow qui ne peut pas être réalisée autrement?
  • Qu’est-ce qui peut mal se passer lors de l’utilisation de plusieurs instances UIWindow ?
  • J’ai vu que les gens utilisaient une 2ème UIWindow pour afficher des vues similaires à celles d’un iPhone. Est-ce une bonne façon de le faire? Pourquoi? Pourquoi pas?
  • Y a-t-il d’autres exemples où il est parfaitement logique d’avoir une autre UIWindow ?

Ce n’est pas que je manque quelque chose. Je n’ai jamais ressenti le besoin de créer une autre instance d’ UIWindow , mais cela permettrait peut-être de faire des choses étonnantes dont je ne suis pas au courant! 🙂

J’espère que cela pourrait m’aider à résoudre ce problème: je dois append une “vue de couverture” sur tout ce qui est actuellement affiché. Cela devrait également fonctionner s’il y a déjà un ou plusieurs contrôleurs modaux présentés. Si j’ajoute un UIView à la vue du contrôleur racine, les contrôleurs modaux sont placés sur le dessus, de même que les contrôleurs de popover. Si je présente la vue de la page de manière modale et qu’il y a déjà un contrôleur modal, seule une partie de l’écran est couverte.

    Un UIWindow peut flotter au-dessus d’autres éléments de l’interface utilisateur, comme le clavier système.

    Pour répondre à votre dernier paragraphe: Créez une UIWindow avec le même cadre que votre fenêtre principale. Définissez sa propriété UIWindowLevelStatusBar sur UIWindowLevelStatusBar . Définissez sa propriété hidden sur NO .

    En commençant par la réponse de Rob, j’ai joué un peu et je voudrais écrire quelques notes pour les autres qui essaient d’obtenir des informations sur ce sujet:

    • Ce n’est pas un problème du tout d’append une autre UIWindow . Créez simplement un et makeKeyAndVisible . Terminé.
    • Supprimez-le en rendant une autre fenêtre visible, puis libérez celle dont vous n’avez plus besoin.
    • La fenêtre “clé” reçoit toutes les entrées du clavier.
    • UIWindow couvre tout, même les modaux, les popovers, etc. Brillant!
    • UIWindow est toujours portrait implicitement. Il ne fait pas de rotation. Vous devrez append un contrôleur en tant que contrôleur racine de la nouvelle fenêtre et laisser cela gérer la rotation. (Juste comme la fenêtre principale)
    • Le niveau de la fenêtre détermine son degré d’affichage. Définissez-le sur UIWindowLevelStatusBar pour qu’il couvre tout. Définissez sa propriété hidden sur NO.
    • Une 2ème UIWindow peut être utilisée pour afficher des vues sur l’écran qui flottent au dessus de tout. Sans créer un contrôleur factice juste pour incorporer cela dans un UIPopoverController .
    • Cela peut être particulièrement utile sur iPhone où il n’y a pas de contrôleur de popover, mais où vous pourriez vouloir imiter quelque chose comme ça.
    • Et oui, cela a bien sûr résolu mon problème: si l’application démissionne, ajoutez une fenêtre de couverture sur tout ce qui est actuellement affiché pour empêcher iOS de prendre une capture d’écran du contenu actuel de votre application.