UIApplication hat eine Methode keyWindow
. Wenn jedoch eine Warnmeldungsansicht angezeigt wird, wird das Fenster der Warnmeldungsansicht und nicht das Hauptfenster der Anwendung zurückgegeben.
Wie erhalte ich das Hauptfenster der App?
Die UIApplicationDelegate
hat normalerweise einen Verweis auf das "Hauptfenster":
[[[UIApplication sharedApplication] delegate] window];
Außerdem hat UIApplication
ein Array von Fenstern [[UIApplication sharedApplication] windows]
.
Siehe die UIApplication-Klassenreferenz .
Ich bin nicht zu 100% sicher, dass dies in jedem Fall funktioniert, aber das sollte funktionieren:
UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
Die Fenster sind von hinten nach vorne angeordnet, daher sollte das Hauptfenster immer auf Index 0 stehen.
Swift 3.0 Version von rmaddys Antwort :
let window = UIApplication.shared.windows.first
Ich sollte auch hinzufügen, dass UIAlertController
seit ___ VariablenUIAlertView
ersetzt wurde und Sie als Ansichtscontroller nicht mehr mit dem Problem der Erstellung neuer Fenster konfrontiert sind.
UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];
Ich bin mir nicht sicher, aber das könnte helfen.
In Swift:
UIApplication.sharedApplication().delegate?.window
Für mich präsentierte ich eine popViewController
self.presentViewController(popViewController, animated: true, completion: nil)
und dann in der viewDidLoad()
dieses popViewController ich fügte eine Unteransicht hinzu , dies verursacht den Fehler in der Konsole und einen Anzeigefehler. Also muss ich eine andere Lösung finden, damit es funktioniert. Hoffe das hilft.
Swift 3
if let window = NSApplication.shared().windows.first {
// you can now modify window attributes
}