Pergunta

Preciso descartar os dois controladores de visualização modais, sei como abrir dois ou mais controladores de visualização

        UINavigationController* navController = self.navigationController;
    NSArray *array=[navController viewControllers];
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [navController popToViiewController:controller animated:YES];

É assim que posso navegar de volta para minha primeira visualização, mas se houver duas ou mais visualizações modais descartadas, como posso navegar de volta

Por favor me ajude, obrigado, Madan Mohan

Foi útil?

Solução 4

UINavigationController* navController = self.navigationController;
NSArray *viewControllers=[navController viewControllers];
UIViewController* controller = [viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];

Se você definir o objeto no índice 0 no código acima, você vai levá -lo para a primeira visualização, que é um controlador de exibição push.

1) ROOTVIEW ---> MoodalView1 ---> MoodalView2 ---> MoodalView3 Se você usar o código acima, estará na Visualização Root.

2) RootView ---> PushView1 ----> MoodalView1 ---> MoodalView2 -----> MoodalView3. Se você usar o código acima, estará na visão de push.

Outras dicas

Dos documentos para -[UIViewController dismissModalViewController]:

Se você apresentar vários controladores de visualização modal em sucessão e, assim, construir uma pilha de controladores de vista modal, chamando esse método em um controlador de exibição de menor na pilha descartará seu controlador de visão imediato e todos os controladores de exibição acima dessa criança na pilha.Quando isso acontece, apenas a visão mais importante é descartada de maneira animada;Quaisquer controladores de visão intermediária são simplesmente removidos da pilha.A visão mais importante é descartada usando seu estilo de transição modal, que pode diferir dos estilos usados ​​por outros controladores de exibição mais baixos na pilha.

Use este código abaixo

[[[self presentingViewController] presentingViewController]  dismissModalViewControllerAnimated:YES];

Eu uso o seguinte método estático para simular o PoPtorootViewController para uma pilha de modais:

// Util.m
+ (void)popModalsToRootFrom:(UIViewController*)aVc {
    if(aVc.parentViewController == nil) {
        return;
    }
    else {
        [Util popModalsToRootFrom:aVc.parentViewController];  // recursive call to this method
        [aVc.parentViewController dismissModalViewControllerAnimated:NO];
    }
}

Você usa assim:

[Util popModalsToRootFrom:aViewController];

Se você quiser algo mais avançado, você pode fazer isso:

+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count {
    if(aVc.parentViewController == nil || count == 0) {
        return;
    }
    else {
        [Util popModalsFrom:aVc.parentViewController popCount:count-1];  // recursive call to this method
        [aVc.parentViewController dismissModalViewControllerAnimated:NO];
    }
}

Em seguida, passe o número de modais para pop, ou apenas -1 para chegar até a raiz.

Por iOS 5, apoio de animation==YES (as visualizações vão se esconder em sequência) e completion quadra:

+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion {
    if (VC.presentedViewController == nil) {
        if (completion) {
            completion();
        }
    } else {
        [BaseViewController dismissAllVCsForVC:VC.presentedViewController
                                        animated:animated
                                      completion:
         ^{
             [VC dismissViewControllerAnimated:animated completion:completion];
         }];
     }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top