J'ai besoin d'une instance de contrôleur de vue racine.
J'ai essayé ces approches:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Renvoie: null :
Aussi quand j'essaye d'obtenir un tableau de contrôleurs:
NSArray *viewControllers = self.navigationController.viewControllers;
Il ne renvoie qu'un seul contrôleur, mais ce n'est pas mon contrôleur de vue racine.
Si j'essaye de prendre du contrôleur de navigation:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Renvoie: null :
Des idées pourquoi? Que puis-je essayer d'autre pour obtenir une instance de mon contrôleur de vue racine?
Merci.
objective-c
swift
ios5
uiviewcontroller
uinavigationcontroller
Garçon de rue
la source
la source
Réponses:
si vous essayez d'accéder
rootViewController
au fichier que vous avez défini dans votre appDelegate. essaye ça:Objectif c
Rapide
Swift 3
Swift 4 et 4.2
Swift 5 et 5.1 et 5.2
la source
Objectif c
Swift 2.0
Swift 5
la source
Comme suggéré ici par @ 0x7fffffff, si vous avez UINavigationController, cela peut être plus facile à faire:
Le code dans la réponse ci-dessus renvoie le contrôleur UINavigation (si vous l'avez) et si c'est ce dont vous avez besoin, vous pouvez l'utiliser
self.navigationController
.la source
Sauf si vous avez une bonne raison, dans votre contrôleur racine, procédez comme suit:
Et lorsque vous souhaitez le notifier:
la source
Swift 3
la source
Façon rapide de le faire, vous pouvez l'appeler de n'importe où, cela retourne facultatif, alors faites attention à cela:
Il est inclus en tant que fonction standard dans:
https://github.com/goktugyil/EZSwiftExtensions
la source
Swift 3: Chage ViewController withOut Segue et envoie AnyObject Utilisation: Identity MainPageViewController sur le ViewController cible
ou si vous souhaitez changer de contrôleur de vue et envoyer des données
la source