2016-03-25 8 views
0

Hier sind meine Viewcontrollers als Bricht (Objekte):Push-Ansicht von modaler Ansicht und dann popToRootView

  • FirstViewController - Ansicht mit Tab-Leiste + Navigationsleiste, auch einen Teil der ta bar;
  • SecondViewController - Ansicht nur mit Navigationssteuerung
  • ThirdViewController - Ansicht nur mit Navigationssteuerung

Und was ich versuche (logische Schritte) zu tun:

  1. vorhanden SecondViewController von FirstViewController (modal)

  2. drücken Sie ThirdViewController von SecondViewController (push)

  3. popToRootViewControllerAnimated - Pop ThirdViewController-FirstViewController (pop)

Und hier ist der Code, den ich durch die Schritte bin mit:

  1. in FirstViewController Klasse

    SecondViewController * secondViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([SecondViewController class])]; 
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController: secondViewController]; 
    [self.navigationController presentViewController: navigationController animated:YES completion:nil]; 
    
  2. in SecondViewController Klasse:

    ThirdViewController * thirdViewController = [[UIStoryboard MainStoryboard] instantiateViewControllerWithIdentifier:NSStringFromClass([ThirdViewController class])]; 
    [self.navigationController pushViewController: thirdViewController animated:YES]; 
    
  3. und in ThirdViewController Klasse I tun:

    [self.navigationController popToRootViewControllerAnimated:YES]; 
    

Meine Fragen ist auf Punkt 3, wenn ich die Pop-Root-View-Controller zu tun, anstatt zu gehen aus ThirdViewController zu FirstViewController geht es nur zu SecondViewController.

+0

Es ist einfach. Du drückst von der zweiten auf und wenn du auf die dritte platzt, gehst du zurück zur zweiten. Denn während du drückst, wird die self.navigationController die Instanz der secondView-Steuerung haben, aber nicht die erste. –

+0

post eine offizielle Antwort mit Codebeispiel, damit ich es abstimmen kann –

Antwort

0

In Schritt 1 haben Sie eine neue UINavigationController-Instanz erstellt, und Sie haben secondViewController als rootViewController dafür festgelegt. Jetzt, in Schritt 2, wenn Sie den ThirdViewController drücken, wird er zum Navigations-Stack von secondViewController hinzugefügt. Schließlich, in Schritt 3, wenn Sie "popToRootViewControllerAnimated" aufrufen, wird es zu secondViewController aufrufen, da secondViewController der rootViewController der Navigation ist.

Um zu FirstViewController zu gehen, rufen Sie "disneyViewControllerAnimated" auf self.navigationController auf.

Bitte beachten Sie den untenstehenden Code.

[self.navigationController dismissViewControllerAnimated:YES completion:nil]; 
0

Vergessen Sie den ersten Schritt. Obwohl Sie einen View-Controller modal präsentieren, machen Sie ihn zu einem Root-View-Controller, bis Sie ihn schließen.

  1. Sie drücken es vom zweiten VC nav Controller.

  2. Wenn Sie es öffnen, gehen Sie zurück zum zweiten VC, wenn der dritte VC auf dem zweiten Nav-Controller gedrückt wird.

Wenn Sie Ihre erste View-Controller gehen wollen, präsentieren das erste VC wieder in der dritten VC durch

[self presentViewController:firstVC animated:YES completion:nil]; 

oder Sie können

[self.navigationController dismissViewController animated:YES completion:nil]; 

Bitte entlassen beachten Sie, dass Sie In der Referenz können nicht mehrere Navigationssteuerungen enthalten sein. Sie können immer nur einen haben.

Auch wenn Sie die zweite VC durch von dem ersten VC nav Controller

[self.navigationController presentViewController:secondVC animated:YES completion:nil]; 

Sie präsentieren den zweiten VC-Navigation-Controller hier, also in der ersten VC-Navigation stapeln andere nav-Controller hinzugefügt werden anwesend sein. Zu diesem Zeitpunkt wird der zweite VC-Navigationscontroller als Referenz verwendet, wenn Sie self.navigationController im zweitenVC anrufen.

Verwandte Themen