Preciso de uma instância do controlador de exibição raiz.
Eu tentei essas abordagens:
UIViewController *rootViewController = (UIViewController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
Retorna: nulo :
Além disso, quando tento obter uma série de controladores:
NSArray *viewControllers = self.navigationController.viewControllers;
Ele retorna apenas um controlador, mas não é meu controlador de visualização raiz.
Se eu tentar tirar do controlador de navegação:
UIViewController *root = (UIViewController*)[self.navigationController.viewControllers objectAtIndex:0];
Retorna: nulo :
Alguma ideia por quê? O que mais eu poderia tentar obter uma instância do meu controlador de visualização raiz?
Obrigado.
Respostas:
se você está tentando acessar o
rootViewController
definido em seu appDelegate. tente isto:Objective-C
Rápido
Swift 3
Swift 4 e 4.2
Swift 5 e 5.1 e 5.2
fonte
Objective-C
Swift 2.0
Swift 5
fonte
Conforme sugerido aqui por @ 0x7fffffff, se você tiver UINavigationController, pode ser mais fácil de fazer:
O código na resposta acima retorna controlador UINavigation (se você o tiver) e se for isso que você precisa, você pode usar
self.navigationController
.fonte
A menos que você tenha um bom motivo, em seu controlador raiz faça o seguinte:
E quando você quiser notificá-lo:
fonte
Swift 3
fonte
Maneira rápida de fazer isso, você pode chamar de qualquer lugar, ele retorna opcional, então fique atento a isso:
Está incluído como uma função padrão em:
https://github.com/goktugyil/EZSwiftExtensions
fonte
Swift 3: Mude o ViewController com o Segue Out e envie AnyObject Use: Identidade MainPageViewController no ViewController de destino
ou se você deseja alterar a visualização do controlador e enviar dados
fonte