2010-11-25 5 views
5

J'ai besoin de rejeter les deux contrôleurs de vue modales, je sais comment faire apparaître deux vues ou plusieurs contrôleursComment rejeter les deux ou plusieurs dismissModalViewController?

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

Voici comment je peux naviguer revenir à ma première vue mais s'il y a deux ou plusieurs rejeter vue modal alors comment puis-je naviguer en arrière

s'il vous plaît aidez-moi, Merci, Madan Mohan

+1

ECLATE au contrôleur de vue racine, vous pouvez faites juste ceci: '[self.navigationController popToRootViewControllerAnimated: YES];' au lieu de votre façon, ce qui est un peu faffy. –

+0

il est présent contrôleurs de vue modale, comment puis-je le faire éclater –

Répondre

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

si vous définissez l'objet à l'index 0 dans le code ci-dessus sa va vous prendre à première vue qui est un contrôleur de vue poussoir.

1) Rootview ---> moodalview1 ---> moodalview2 ---> moodalview3 Si vous utilisez le code ci-dessus, vous serez en mode root.

2) Racine ---> Pushview1 ----> moodalview1 ---> moodalview2 -----> moodalview3. Si vous utilisez le code ci-dessus, vous serez dans le PushView.

5

de la documentation pour -[UIViewController dismissModalViewController]:

Si vous présentez plusieurs vue modale contrôleurs successivement, et donc construire une pile de vue modales contrôleurs, appelant cette méthode sur un contrôleur de vue bas dans la pile rejette son contrôleur vue enfant immédiat et tous les contrôleurs de vue au-dessus de cet enfant sur la pile. Lorsque cela se produit, seule la vue la plus en haut est rejetée de façon animée; les contrôleurs de vue intermédiaire sont simplement retirés de la pile. La vue supérieure est ignorée à l'aide de son style de transition modale , qui peut différer des styles utilisés par les autres contrôleurs inférieurs dans la pile.

3

J'utilise la méthode statique utilitaire suivante pour simuler popToRootViewController pour une pile de modaux:

// 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]; 
    } 
} 

Vous pouvez l'utiliser comme ceci:

[Util popModalsToRootFrom:aViewController]; 

Si vous voulez quelque chose de plus avancé, vous pouvez faire cela:

+ (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]; 
    } 
} 

Ensuite, passez le nombre de modaux à pop, ou juste -1 pour faire apparaître un Tout le chemin vers la racine.

1

Pour iOS 5, le soutien de animation == YES (vues cacheront en séquence) et completion bloc:

+ (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]; 
     }]; 
    } 
} 
4

Utilisez ce ci-dessous le code

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