Was ist der Unterschied zwischen UIApplication.sharedApplication.delegieren.Fenster und UIApplication.sharedApplication.keyWindow?
Kann mir jemand helfen, zu verstehen, den Unterschied zwischen den folgenden zwei Zeilen:
[UIApplication.sharedApplication.delegate.window addSubview:myView];
[UIApplication.sharedApplication.keyWindow addSubview:myView];
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie gleich auf iOS. Wenn Sie anders sind, Sie werden in der Regel präsentiert sich ein weiteres Fenster andere als die app-delegate ' s Hauptfenster. Ihre app kann, haben viele Fenster, aber nur die
keyWindow
ist das Fenster, das auf dem Bildschirm sichtbar ist und den Empfang von Ereignissen (Beispiel könnte ein UIAlert, wenn sichtbar und empfangen von Ereignissen, es ist die keywindow) Referenz: https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.htmlaus der Dokumentation:
UIApplication.sharedApplication.delegate.window
:ich.e dies ist die Eigenschaft
window
dass Sie in IhremAppDelegate.h
Datei.UIApplication.sharedApplication.keyWindow
:Auf iOS rufen Sie
makeKeyAndVisible
in IhremAppDelegate.m
innenapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Den erstellt appDelegate Fenster keyWindow. In der Regel, bank-apps wechseln der Fenster Taste, wenn die app in den hintergrund gelegt zum Schutz der Benutzer vertrauliche Informationen, wenn Sie die home-Taste verdoppelt wird angezapft und wechseln zurück zur main-delegieren-Fenster, wenn die app im Vordergrund.
Diese Antwort ist in Zusammenarbeit mit: @SipkeSchoorstra, @D-Mx und @andyDarwin
Für die meisten Anwendungen, Sie werden die gleichen sein... aber nicht immer.
[UIApplication sharedApplication].keyWindow
ist das Fenster, das derzeit auf dem Gerät angezeigt. Dies ist normalerweise der Anwendung Fenster, aber könnte ein system-Fenster.[UIApplication sharedApplication].delegate.window
ist das Fenster Ihrer Anwendung verwenden soll.Welches sollte verwendet werden? Gut, dass alle abhängig vom Kontext.
Wenn Sie die Aktualisierung Teil Ihrer Anwendung ist, sollten Sie Ansichten hinzufügen, um Ihre Anwendung Fenster. Dies ist fast immer das, was Sie tun möchten.
Persönlich, ich benutze immer
[[UIApplication sharedApplication].delegate.window addSubview:view]
oder[self.view.window addSubView:view]
(innerhalbUIViewController
) wenn ich hinzufügen müssen, um einen Blick direkt auf das Fenster zu.Möglicherweise gibt es einige Zeiten, wenn Sie wollen, zu präsentieren, einen Blick auf das Fenster derzeit angezeigt wird, unabhängig davon, ob das Fenster gehört zu Ihrer Anwendung, oder ist ein system-Fenster. Ich habe nicht ausgeführt, in dieser situation.
keyWindow
für zeigt einen Alarm, wenn Sie erhalten remote-Benachrichtigung? Ich spreche über die iOS-Versionen, die älter als iOS10, wo Sie nicht über diewillPresent
?Basheer_CAD s Antwort ist nicht richtig. Sie sind nicht immer die gleichen in iOS.
Jeffery Thomas, die Antwort ist richtig und lassen Sie mich ein konkretes Beispiel.
Ausgabe:
Wenn
viewDidLoad
eigentlich die Fenster noch nicht fertig ist, so gibt es nichts für das system-Fenster.UIAlertView
Dominieren die Fenster, so dass Sie nicht bekommen, das Fenster, das Sie wollen.Das einfachste setup ist nur noch ein
UIWindow
. In der Regel, dass das Fenster gehalten wird, als eine Immobilie auf dem app-delegate. DiekeyWindow
ist die eine, die festgelegt ist, zum empfangen von Tastatur und anderen non-touch-bezogene Ereignisse. Nur ein Fenster zu einem Zeitpunkt kann der Schlüssel Fenster. Also, wenn Sie fügen Sie ein 2. Fenster und machen es denkeyWindow
(über[window makeKeyAndVisible]
), Ihre Linien zurück, andere windows!