popTOViewController

我有一个名为“家”的button。 在该button操作中,我有以下代码:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES]; 

当我点击这个button我的应用程序崩溃。

将索引从1更改为2,然后完美地popup视图。

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:2] animated:YES]; 

我的观点序列是第1页 – >第2页 – >第3页

我想从第3页到第1页,但应用程序崩溃。 从Page3到Page2它工作正常。

尝试这个。

在我写了SeeMyScoresViewController的地方,你应该编写你必须去的View Controller类(例如,Home Class)

 NSArray *viewControllers = [[self navigationController] viewControllers]; for( int i=0;i<[viewControllers count];i++){ id obj=[viewControllers objectAtIndex:i]; if([obj isKindOfClass:[SeeMyScoresViewController class]]){ [[self navigationController] popToViewController:obj animated:YES]; return; } } 

如果你想去根视图控制器(page1)只使用:

  [self.navigationController popToRootViewControllerAnimated:YES]; 

另外,索引中的第一项不是项目1,而是项目0:

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES]; 

这应该把你带回到第一个viewController,但它会让他们更容易使用popToRootViewController方法。

通常从堆栈顶端来做这件事更重要,所以:

在UINavigationController的子类或类别中:

 - (void)popToLast:(Class)aClass { for (int i=self.viewControllers.count-1; i>=0; i--) { UIViewController *vc = self.viewControllers[i]; if ([vc isKindOfClass:aClass]) { [self popToViewController:vc animated:YES]; break; } } } 

你打电话

 popToLast:[SomeViewController class]; 

popup回特定控制器的最新方法是:

 [self.navigationController.viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { if ([obj isKindOfClass:[MyViewController class]]) { [self.navigationController popToViewController:obj animated:YES]; *stop = YES; } }]; 

MyViewController是你想要回弹的控制器。