Como dispensar os dois ou mais DispensaModalViewController?
-
28-09-2019 - |
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
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];
}];
}
}