2013-11-20 8 views
7

Was ich tun möchte, scheint ziemlich einfach zu sein, aber ich kann keine Antworten im Internet finden. Ich habe den Login-Bildschirm als Root-View-Controller und dann Tab-Leiste-Controller und in jedem Tab habe ich einen Navigationscontroller.Wie geht es zurück zum Root View Controller im Storyboard?

Ich habe Storyboard und die Hierarchie verwendet wird, unten beschrieben,

Root VC 
    | 
    --- tabbar controller 
      | 
      ---Navigation Controller 
       | 
       --- VC1 

Anforderung ist für die Root-View-Controller von VC1 zurück zu navigieren. Wie können wir das erreichen?

+2

Sie sollten eine Abwickelstation segue, dies zu tun. – rdelmar

+0

Vielen Dank für Ihre Antwort @Drelmar, ich stimmte Ihrer Lösung zu. Aber das Problem, das ich jetzt gegenüberstelle, ist, ich bin nicht in der Lage, den Knopfausgang zu verbinden, um den Knopf des Storyboards zu verlassen, um ihn zu lösen. Es war anscheinend nicht zugänglich. Kannst du mir bitte dabei helfen? –

+0

Sieh dir meine Antwort hier an (http://StackOverflow.com/questions/16158586/App-running-Slow-After-Loading-ViewController-then-Unload-about-15-20-times/16160239#16160239), und sehen wenn du es so versuchst. – rdelmar

Antwort

3

Ich habe die Lösung zu den Problemen mit den "Unwind Segues".

Schritt 1) ​​Das Minimum, das Sie brauchen, ist, den View-Controller für Ihre Zielansicht (eine Ansicht, die zuvor in der Navigation aufgetaucht ist und Sie darauf abspulen wollen) zu unterklassifizieren und eine Methode wie diese hinzuzufügen (der Methodenname kann alles sein, das Sie wollen, aber es sollte eindeutig sein, da alle Abwickler segues in Ihrer gesamten App aufgeführt ist zusammen):

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue { 
//nothing goes here 
} 

Schritt 2) Nun, in der Quellansicht (aka, die Ansicht, dass Wenn Sie sich von der Software erholen möchten, ziehen Sie einfach einen Abschnitt von Ihrer Schaltfläche oder etwas anderem auf das kleine grüne "EXIT" -Symbol am unteren Rand der Quellansicht. Es sollte jetzt eine Option zum Verbinden mit "- unwindToViewControllerNameHere" geben.

Das ist es, Ihr Segment wird sich entspannen, wenn Ihre Taste angetippt wird. Und wir können zu jedem gewünschten View-Controller wechseln, und der Rest der View-Controller wird freigegeben.

0

Verwenden Sie folgenden Code

- (void) forRootViewCon { 
    UINavigationController *nav = (UINavigationController*) self.view.window.rootViewController; 
    UIViewController *root = [nav.viewControllers objectAtIndex:0]; 
    [root performSelector:@selector(returnToRoot)]; 
} 

Call-Methode Name ist returnToRoot

- (void)returnToRoot { 
    [self dismissViewControllerAnimated:NO completion:nil]; 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

ODER

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

Dies sollte genug sein.

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

Sie sollten den Root-VC in der Navigationssteuerung aktivieren:

--- Navigation Controller - | Wurzel VC | --- Tab-Controller | --- VC1

Und dann rufen

[navController popToRootViewControllerAnimated:YES]; 

EDIT: Ich denke, Sie haben Probleme mit einem tabBar Controller in einem Navigationscontroller?

+0

Danke für die Antwort, aber ich möchte über die Navigation im Tabbar-Controller wissen. Ich denke, es ist nicht gut, die Hierarchie wie NavigationController -> Tab-Controller -> Navigation Controller zu haben. Apple wird dies nicht vorschlagen. –

+0

Ich habe eine Root-VC im Navigationscontroller, aber ich verstecke es. Wie gehe ich zur Root-Ansicht? – Gank

2

Wenn Controller-Hierarchie vorhanden ist wie

--- Navigation Controller - | Wurzel VC | --- Tab-Controller | --- Navigationscontroller - | --- VC1

und es gibt eine UIButton auf VC1, usw. klicken, dass Sie root Viewcontroller (Root VC) bewegen wollen, dann verwenden:

-(void)moveToRootViewController { 

    //Move to root viewController 
    UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"]; 

    self.view.window.rootViewController = controller; 

} 

hier mainnav ist Storyboard Kennung von root Viewcontroller Navigationssteuerung.

ViewControllers hierarchy

Nach weiße Farbe Viewcontroller Bild ist eine Wurzel Viewcontroller und TabBarController haben zwei Registerkarten mit Navigationssteuerung und wenn Sie wollen root Viewcontroller aus der zweiten Registerkarte Viewcontroller UIButton (schwarze Farbe) klicken dann verwenden Sie die oben bewegen Code.

Wenn Sie eine Hierarchie wie haben --- Navigation Controller - | Wurzel VC | --- VC1 ---- | --- VC2 ---- |

und wollen root Viewcontroller (Root VC) aus VC1 oder VC2 dann bewegen verwenden:

[self.navigationController popToRootViewControllerAnimated:YES]; 
Verwandte Themen