Vorteile, Probleme, Beispiele für das Hinzufügen eines weiteren UIWindows zu einer iOS App?

Vor kurzem habe ich mich über die Tatsache UIWindow , dass eine iOS App nur ein UIWindow . Es scheint kein Problem zu sein, ein anderes UIWindow zu erstellen und es auf dem Bildschirm zu platzieren.

Meine Frage ist irgendwie vage, aber ich bin interessiert an:

  • Was könnte ich mit einem zweiten UIWindow , das auf andere Weise nicht möglich ist?
  • Was kann schief gehen, wenn mehrere UIWindow Instanzen verwendet werden?
  • Ich habe gesehen, dass Leute ein 2. UIWindow , um popoverartige Ansichten auf dem iPhone anzuzeigen. Ist das ein guter Weg? Warum? Warum nicht?
  • Gibt es andere Beispiele, wo es sinnvoll ist, ein anderes UIWindow zu haben?

Es ist nicht so, dass ich etwas verpasse. Ich habe nie das Bedürfnis verspürt, eine andere UIWindow Instanz zu erstellen, aber vielleicht würde es mir erlauben, erstaunliche Dinge zu tun, die mir nicht bewusst sind! 🙂

Ich hoffe, dass es mir hilft, dieses Problem zu lösen: Ich muss eine “Cover-Ansicht” über das, was gerade angezeigt wird, hinzufügen. Es sollte auch funktionieren, wenn bereits ein oder mehrere modale Controller angezeigt werden. Wenn ich der Ansicht des Root-Controllers eine UIView hinzufüge, sitzen die modalen Controller oben, ebenso die Popover-Controller. Wenn ich die Cover-Ansicht modal präsentiere und es bereits einen modalen Controller gibt, wird nur ein Teil des Bildschirms abgedeckt.

Ein UIWindow kann über andere UI-Elemente wie die UIWindow schweben.

So adressieren Sie Ihren letzten Absatz: UIWindow Sie ein UIWindow mit demselben Rahmen wie Ihr Hauptfenster. windowLevel Eigenschaft UIWindowLevelStatusBar auf UIWindowLevelStatusBar . Legen Sie die hidden Eigenschaft auf NO .

Beginnend mit Robs Antwort habe ich ein bisschen herumgespielt und möchte einige Notizen für andere schreiben, die versuchen, Informationen zu diesem Thema zu bekommen:

  • Es ist überhaupt kein Problem, ein weiteres UIWindow hinzuzufügen. Erstellen Sie einfach einen und makeKeyAndVisible . Erledigt.
  • Entferne es, indem du ein anderes Fenster sichtbar machst und dann das, das du nicht mehr brauchst.
  • Das Fenster, das “Schlüssel” ist, empfängt alle Tastatureingaben.
  • UIWindow deckt alles ab, sogar Modals, Popovers, etc. Brilliant!
  • UIWindow ist implizit immer Porträt. Es rotiert nicht. Sie müssen einen Controller als Root-Controller des neuen Fensters hinzufügen und die Rotation übernehmen lassen. (Genau wie das Hauptfenster)
  • Die Höhe des Fensters bestimmt, wie “hoch” es angezeigt wird. UIWindowLevelStatusBar Sie es auf UIWindowLevelStatusBar , damit es alles abdeckt. Legen Sie die hidden Eigenschaft auf NEIN fest.
  • Ein 2. UIWindow kann verwendet werden, um Ansichten auf den Bildschirm zu bringen, die über allem schweben. Ohne einen Dummy-Controller zu erstellen, nur um diesen in einen UIPopoverController einzubetten.
  • Es kann besonders nützlich auf dem iPhone sein, wo es keinen Popover-Controller gibt, aber wo Sie etwas ähnliches nachahmen möchten.
  • Und ja, es hat natürlich mein Problem getriggers: Wenn die App die Aktivierung zurückzieht, füge ein Deckungsfenster über dem, was gerade gezeigt wird, um zu verhindern, dass iOS einen Screenshot des aktuellen Inhalts deiner App macht.