Domanda

Devo chiudere i due controller di visualizzazione modali, so come visualizzare due o più controller di visualizzazione

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

Ecco come posso tornare alla mia prima visualizzazione, ma se ci sono due o più visualizzazioni modali di eliminazione, come posso tornare indietro?

Per favore aiutami, grazie, Madan Mohan

È stato utile?

Soluzione 4

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

se imposti l'oggetto sull'indice 0 nel codice sopra ti porterà alla prima visualizzazione che è un controller di visualizzazione push.

1)Rootview--->moodalview1--->moodalview2--->moodalview3 se usi il codice precedente sarai nella visualizzazione root.

2)Rootview--->Pushview1---->moodalview1--->moodalview2----->moodalview3.se usi il codice sopra ti troverai in PushView.

Altri suggerimenti

Dai documenti per -[UIViewController dismissModalViewController]:

Se si presentano diversi controller di visualizzazione modale in successione e quindi si creano uno stack di controller di visualizzazione modale, chiamando questo metodo su un controller di visualizzazione più basso nello stack, licenzia il controller di vista sui figli immediati e tutti i controller di visualizzazione sopra quel bambino sullo stack.Quando ciò accade, solo l'opinione più alta viene respinta in modo animato;Qualsiasi controller di vista intermedi viene semplicemente rimosso dallo stack.La vista più alta viene respinta usando il suo stile di transizione modale, che può differire dagli stili utilizzati da altri controller di vista più bassi nello stack.

Usa questo codice qui sotto

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

Utilizzo il seguente metodo statico di utilità per simulare popToRootViewController per uno stack di modali:

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

Lo usi in questo modo:

[Util popModalsToRootFrom:aViewController];

Se vuoi qualcosa di più avanzato, potresti fare questo:

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

Quindi passa il numero di modali da pop, o semplicemente -1 per pop fino alla radice.

Per iOS 5, supporto di animation==YES (le visualizzazioni verranno nascoste in sequenza) e completion bloccare:

+ (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];
         }];
     }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top