2016-06-30 18 views
0

Ich habe ein Problem, dass meine iOS App mehrere ViewControllers hat.Wie komme ich zum root ViewController zurück, wenn der Strom tief verschachtelt ist?

Zum Beispiel: ViewControllers wie A, B, C benannt. A-B mit pushViewController sprang, B-C mit presentViewController sprang, sprang C-D mit presentViewController und so weiter.

Wenn der aktuelle ViewController Z oder ein anderer ViewController ist, wie kann ich direkt zu A springen?

+0

Haben Sie eine Beute an diesem .. http://stackoverflow.com/questions/12561735/what-are-unwind-segues-for -und-wie-willst-du-sie-benutzen sie –

+0

nimmst du navigationController oder nicht? –

+0

@iGodric Danke für die Bearbeitung, mein Englisch ist wirklich sehr arm ..;) – Tanddd

Antwort

1

unten versuchen, Code bekommen. Es wird für alle Fälle funktionieren:

for (UIViewController *controller in self.navigationController.viewControllers) 
{ 
     if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]]) 
     { 
      if(controller.isBeingPresented) 
       [controller.presentingViewController dismissViewControllerAnimated:YES completion:NULL]; 
      else 
       [self.navigationController popToViewController:controller animated:YES]; 

      break; 
     } 
} 
+0

Danke, lassen Sie mich einen Versuch haben ~ – Tanddd

+0

@Tanddd Wenn die Antwort funktioniert dann bitte akzeptieren Sie es. Das ist Motivation für uns. –

+0

Entschuldigung für die Annahme zu fälschen. In der Situation, die zuvor beschrieben wird, wird der Code nicht funktionieren wegen zu viel 'presentViewController' und 'pushViewController'. Schließlich habe ich es gelöst, indem ich Base VC eine Return-Funktion hinzugefügt habe. Danke für Ihre Hilfe ~~ – Tanddd

0

Für die Ansicht-Controller zeigen durch pushViewController, Sie RootViewController über [self.navigationController.viewControllers objectAtIndex:0]

Andere gezeigt von presentViewController bekommen können, Sie Eltern-View-Controller über self.presentingViewController

1
[[self navigationController] popToRootViewControllerAnimated:YES]; 

es Ihre Viewcontroller Controller Wurzel-Pop wird.

+0

Es funktioniert nicht, während es hier einen präsentierten Viewcontroller gibt ~ – Tanddd

0

Unabhängig davon, ob Sie von einem anderen View-Controller zu einem ViewController zurückkehren möchten, müssen Sie zuerst den Wert RootViewController festlegen. Wenn Sie XIB verwenden, müssen Sie als Root in der App delegate didFinishLaunchWithOptions Methode festlegen. Wenn Sie Storyboard verwenden, sollten Sie NavigationController im Storyboard setzen und AViewController als ROOT setzen, indem Sie Strg + Ziehen (Maus) verwenden. Ich arbeite in einem Projekt, das viele View-Controller hat. Es hat pushViewController und PresentViewControllers auch ich setze A als RootViewController. So kann ich von jedem View-Controller zu RootViewController zurückkehren.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
     // Override point for customization after application launch. 
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; 
    AViewController *aVC = [[AViewController alloc]initWithNibName:@“AViewController" bundle:nil]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC]; 
    self.window.rootViewController = aVC; 
    [navController setNavigationBarHidden:YES]; 
    self.window.backgroundColor = [UIColor clearColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

Für von einem anderen View-Controller AViewController gehen

- (IBAction)actionGoBack:(id)sender 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
}