web-dev-qa-db-fra.com

Obtenir la fenêtre principale de l'application

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?

26
Jonathan.

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].

Voir Référence de la classe UIApplication .

50
Espresso

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.

8
rmaddy

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éé.

4
fpg1503
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.

3
RKY

En rapide:

UIApplication.sharedApplication().delegate?.window
3
Glauco Neves

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.

0
AnthonyR

Swift 3

    if let window = NSApplication.shared().windows.first {
        // you can now modify window attributes
    }
0
Ted Lowery