Ich erstelle ein wiederverwendbares Framework für die Anzeige von Benachrichtigungen in einer iOS-Anwendung. Ich möchte, dass die Benachrichtigungsansichten über alles andere in der Anwendung hinzugefügt werden, ähnlich wie bei einer UIAlertView. Wenn ich den Manager initiiere, der auf NSNotification-Ereignisse wartet und als Antwort Ansichten hinzufügt, muss ich einen Verweis auf die oberste Ansicht in der Anwendung erhalten. Das habe ich im Moment:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Würde dies für jede iOS-Anwendung funktionieren oder ist dies eine sicherere / bessere Möglichkeit, die Draufsicht zu erhalten?
quelle
(null)
meine iOS-8-App (Storyboard-Problem?). Irgendwelche Hinweise? Vielen Dank! (Hinweis:(null)
zurück beidesviewDidLoad
undviewWillAppear:
Zeit.viewDidAppear:
Ist zu spät.Es gibt zwei Teile des Problems: Oberes Fenster, Draufsicht auf das obere Fenster.
Alle vorhandenen Antworten haben den oberen Fensterteil verfehlt. Es
[[UIApplication sharedApplication] keyWindow]
ist jedoch nicht garantiert, dass es das oberste Fenster ist.Oberes Fenster. Es ist sehr unwahrscheinlich, dass
windowLevel
für eine App zwei Fenster mit derselben Koexistenz vorhanden sind, sodass wir alle Fenster nach sortierenwindowLevel
und das oberste erhalten können.Draufsicht auf das obere Fenster. Nur um vollständig zu sein. Wie bereits in der Frage ausgeführt:
quelle
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Tatsächlich kann Ihre Anwendung mehr als ein UIWindow enthalten. Wenn beispielsweise eine Tastatur auf dem Bildschirm angezeigt
[[UIApplication sharedApplication] windows]
wird, enthält sie mindestens zwei Fenster (Ihr Tastenfenster und das Tastaturfenster).Wenn Sie also möchten, dass Ihre Ansicht auf beiden angezeigt wird, müssen Sie Folgendes tun:
(Angenommen, lastObject enthält das Fenster mit der höchsten windowLevel-Priorität).
quelle
Ich bleibe bei der Frage, wie der Titel sagt, und nicht bei der Diskussion. Welche Ansicht ist an einem bestimmten Punkt von oben sichtbar?
Kann direkt mit jedem UIWindow als Empfänger oder jedem UIView als Empfänger verwendet werden.
quelle
Wenn Sie eine Ladeansicht hinzufügen (z. B. eine Aktivitätsindikatoransicht), stellen Sie sicher, dass Sie ein Objekt der UIWindow-Klasse haben. Wenn Sie kurz vor dem Anzeigen Ihrer Ladeansicht ein Aktionsblatt anzeigen,
keyWindow
ist dies dasUIActionSheet
und nicht dasUIWindow
. Und da das Aktionsblatt verschwindet, verschwindet auch die Ladeansicht. Oder das hat mir Probleme bereitet.quelle
Wenn Ihre Anwendung nur im Hochformat funktioniert, reicht dies aus:
Und Ihre Ansicht wird nicht über Tastatur und Statusleiste angezeigt.
Wenn Sie eine Ansicht von oben über die Tastatur oder die Statusleiste erhalten möchten oder die Ansicht von oben mit Geräten korrekt gedreht werden kann, versuchen Sie Folgendes:
https://github.com/HarrisonXi/TopmostView
Es unterstützt iOS7 / 8/9.
quelle
Verwenden Sie einfach diesen Code, wenn Sie eine Ansicht über alles auf dem Bildschirm hinzufügen möchten.
quelle
Versuche dies
quelle
quelle