我创建了一个基于视图的4个视图应用程序。通过使用导航控制器我正在改变视图。在我的第3个视图中,有一个按钮。如果我点击该按钮,应用程序应该进入第一个视图(2个视图)。
我用过
[self.navigationController popViewControllerAnimated:YES];
[self.navigationController popViewControllerAnimated:YES];
这不起作用。它只会转到上一页。
答案 0 :(得分:12)
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[NeededViewController class]])
{
[self.navigationController popToViewController:controller
animated:YES];
break;
}
}
答案 1 :(得分:4)
试试这个,并根据您的规范进行更改
-(void)goToMainCategoryView;
{
id object = nil;
for (UIViewController *viewControl in self.navigationController.viewControllers)
{
if(viewControl.view.tag == 0)
{
object = viewControl;
}
}
[self.navigationController popToViewController:object animated:YES];
}
答案 2 :(得分:4)
另一个通过索引选择UIViewController的简单根目录是使用:
NSArray *viewsArray = [self.navigationController viewControllers];
UIViewController *chosenView = [viewsArray objectAtIndex:1];
[self.navigationController popToViewController:chosenView animated:YES];
然后 chosenView
将成为导航堆栈中的第二个视图(位置1)。如果你有一个大堆栈并且想要去特定的视图。
答案 3 :(得分:3)
使用
popToRootViewControllerAnimated:
一直回到顶视图控制器:
文档:
弹出除根视图控制器之外的堆栈上的所有视图控制器并更新显示。
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
或
popToViewController:animated:
返回特定的视图控制器,提供您想要访问的视图控制器。
文档:
弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
参数
的viewController 您希望位于堆栈顶部的视图控制器。
答案 4 :(得分:0)
同样的事情在swift 1.2 :: xcode:6.4
for controller: UIViewController in self.navigationController?.viewControllers as! [UIViewController] {
if controller.isKindOfClass(YourViewController) {
self.navigationController!.popToViewController(controller, animated: true)
}
}