UIApplication a une méthode keyWindow
. Toutefois, si une vue d'alerte est affichée, la fenêtre de la vue d'alerte est renvoyée, pas la fenêtre principale de l'application.
Comment puis-je obtenir la fenêtre principale de l'application?
La UIApplicationDelegate
a généralement une référence à la "fenêtre principale":
[[[UIApplication sharedApplication] delegate] window];
De plus, UIApplication
a un tableau de fenêtres [[UIApplication sharedApplication] windows]
.
Je ne suis pas sûr à 100% que cela fonctionne dans tous les cas, mais cela devrait fonctionner:
UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
Les fenêtres sont ordonnées dans le sens inverse de sorte que la fenêtre principale doit toujours être à l'index 0.
Swift version 3.0 de réponse de rmaddy :
let window = UIApplication.shared.windows.first
Je devrais également ajouter que, puisque iOS 8.0 UIAlertController
a remplacé UIAlertView
et qu’il s’agit d’un contrôleur de vue, le problème des nouvelles fenêtres ne sera peut-être plus créé.
UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];
Je ne suis pas sûr mais cela pourrait aider.
En rapide:
UIApplication.sharedApplication().delegate?.window
Pour moi, je présentais une popViewController
self.presentViewController(popViewController, animated: true, completion: nil)
puis dans la viewDidLoad()
de ce popViewController J'ajoutais une sous-vue , cela provoquait l'erreur dans la console et un bogue d'affichage. Je dois donc trouver une autre solution pour que cela fonctionne. J'espère que cela t'aides.
Swift 3
if let window = NSApplication.shared().windows.first {
// you can now modify window attributes
}