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是你想要回弹的控制器。