Necesito una instancia del controlador de vista raíz.
Probé esos enfoques:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Devoluciones: nulo :
Además, cuando trato de obtener una matriz de controladores:
NSArray *viewControllers = self.navigationController.viewControllers;
Devuelve solo un controlador, pero no es mi controlador de vista raíz.
Si trato de tomar del controlador de navegación:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Devoluciones: nulo :
¿Alguna idea de por qué? ¿Qué más puedo intentar para obtener una instancia de mi controlador de vista raíz?
Gracias.
objective-c
swift
ios5
uiviewcontroller
uinavigationcontroller
Niño de la calle
fuente
fuente
Respuestas:
si está intentando acceder al
rootViewController
que configuró en su appDelegate. prueba esto:C objetivo
Rápido
Swift 3
Swift 4 y 4.2
Swift 5 y 5.1 y 5.2
fuente
C objetivo
Swift 2.0
Rápido 5
fuente
Como lo sugiere aquí @ 0x7fffffff, si tiene UINavigationController, puede ser más fácil de hacer:
El código en la respuesta anterior devuelve el controlador UINavigation (si lo tiene) y si esto es lo que necesita, puede usarlo
self.navigationController
.fuente
A menos que tenga una buena razón, en su controlador raíz haga esto:
Y cuando quieras notificarlo:
fuente
Swift 3
fuente
Una forma rápida de hacerlo, puede llamar a esto desde cualquier lugar, devuelve opcional, así que tenga cuidado con eso:
Se incluye como función estándar en:
https://github.com/goktugyil/EZSwiftExtensions
fuente
Swift 3: Chage ViewController con Out Segue y envía AnyObject Use: Identity MainPageViewController en el ViewController de destino
o si desea cambiar el controlador de vista y enviar datos
fuente