Change root view and back to root view

Identificador: 11469
Autor: Ricardo Bocchi   segunda-feira, Dia 1 de maio de 2023, às 02:50:01 horas
Revisado Por:    quarta-feira, Dia 28 de outubro de 2015, às 19:41:47 horas
Visualização: Todos

Pontos: 0   Acessos: 6001

Vou postar um código para resolver a seguinte necessidade:

Estou em uma view da app (UIViewController), que pode ser uma view dentro de outra view.. ou seja, estou na pilha de UIViewController do app, e preciso voltar para a tela inicial a partir dessa view. Além disso ainda preciso alterar a root view:

Exemplo: 

1 - App entra na tela do perfil do usuário
2 - Do perfil, vou para a tela de configurações
3 - Nessa tela, tenho uma opção de sair/logout
4 - Então preciso que meu root view, que antes era o perfil seja a tela de login. E preciso ir diretamente para essa tela, e o ciclo de iteração entre telas reinicie.

    NSArray* ctrls = [self.navigationController viewControllers];

    for(UIViewController *temp in ctrls){

        [temp removeFromParentViewController];    

    }


    UIViewController *login = [[LoginViewController alloc] init];

    [[[UIApplication sharedApplication] keyWindow].rootViewController dismissViewControllerAnimated:YES completion:nil];

    [[UIApplication sharedApplication] keyWindow].rootViewController = login;

    [self.navigationController popToRootViewControllerAnimated:YES];