2010-11-25 9 views
5

Ich brauche die beide modal View-Controller zu entlassen, ich weiß, wie zwei oder mehr Pop-View-ControllerWie man die zwei oder mehr disableModalViewController ablehnt?

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

Dies ist, wie ich zurück zu meinem ersten Blick navigieren kann, aber wenn es zwei oder mehr modale Ansicht entlassen dann, wie ich

zurück navigieren kann mir bitte helfen, vielen Sie, Madan Mohan

+1

Um an die Wurzel View-Controller-Pop können Sie tun Sie das einfach: '[self.navigationController popToRootViewControllerAnimated: YES];' statt Ihrer Art, die ein bisschen fade ist. –

+0

es ist modal view controller vorhanden, wie kann ich es knallen –

Antwort

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

wenn Sie das Objekt bei Index 0 im obigen Code seine gonna setzen nehmen Sie an den ersten Ansicht, die ein Push-View-Controller ist.

1) Rootview ---> moodalview1 ---> moodalview2 ---> moodalview3 Wenn Sie obigen Code verwenden, dann werden Sie in der Root-Ansicht sein.

2) Grundansicht ---> Pushview1 ----> moodalview1 ---> moodalview2 -----> moodalview3. Wenn Sie obigen Code verwenden, befinden Sie sich in PushView.

5

Aus der Dokumentation für -[UIViewController dismissModalViewController]:

Wenn Sie mehrere modale Ansicht Controller nacheinander präsentieren und damit einen Stapel von modalen Ansicht Controller bauen, diese Methode auf einem Controller Ansicht Aufruf weiter unten im Stapel entlässt seine unmittelbare Kind Ansicht Controller und alle View-Controller über diesem Kind auf dem Stapel. Wenn dies geschieht, wird nur die oberste Ansicht auf eine animierte Weise entlassen; Alle Zwischenansicht Controller sind einfach vom Stapel entfernt. Die oberste Ansicht wird unter Verwendung des modalen Übergangsstils verworfen, der sich möglicherweise von den Stilen unterscheidet, die von anderen View-Controllern im Stapel verwendet werden.

3

Ich benutze das folgende Dienstprogramm statische Methode popToRootViewController für einen Stapel von Modalverben zu simulieren:

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

Sie verwenden es wie folgt aus:

[Util popModalsToRootFrom:aViewController]; 

Wenn Sie etwas weiter fortgeschritten möchten, können Sie tun dies:

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

Dann die Anzahl der Modalverben passieren Pop, oder einfach nur -1 bis Pop ein ll den Weg zur Wurzel.

1

Für iOS 5, Unterstützung von animation == YES (Ansichten werden in der Reihenfolge verstecken) und completion Block:

+ (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

verwenden Code unten

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