我有3个视图(xib'd)第三个视图打开一个模态视图(也是xib'd)。 我的目标是处理模态视图并跳转到视图#1。
我使用了以下代码,但它什么也没做。
self.statusView = [[StatusViewController alloc] initWithNibName:@"StatusViewController" bundle:nil];
[self.navigationController popToViewController:self.statusView animated:YES];
[self.navigationController popToViewController:
我也尝试了以下相同的结果。 [self.navigationController.viewControllers objectAtIndex:0] animated:YES];
我疯了......
statusView有一个定期合成的访问器,它代表我想要跳转到的视图。
答案 0 :(得分:7)
根据您目前所说的内容,您的观点是如何相互建立的并不完全清楚。
我猜你有一个导航控制器,以及导航堆栈上显示的3个视图控制器。
如果是这种情况,并且您希望一次弹出两个屏幕(从#3到#1,跳过#2),那么您需要一个指向视图控制器的指针# 1(不是视图本身)。看起来您的问题中的第一个popViewController:
方法调用正在视图中发送。
弹出到第一个视图控制器的示例代码:
UINavigationController* navController = self.navigationController;
UIViewController* controller = [navController.viewControllers objectAtIndex:0];
[navController popToViewController:controller animated:YES];
如果你已经尝试过这种方法,但它不起作用,可能会出现一些问题:
self.navigationController
实际上不是正确的对象。您可以采取以下一些步骤来测试这些假设:
NSLog(@"Nav controller is at %p", navController);
并在此代码中添加对NSLog(@"Now my navController is at %p", navController);
的调用,并检查地址是否匹配。如果导航控制器是正确的,则打印出当前导航堆栈;这样的事情(假设每个视图控制器都有不同的类名):
for (UIViewController* viewController in navController.viewControllers) {
NSLog(@"%s", class_getName([viewController class]));
}
对您认为可见的导航控制器进行可视化操作以确保其实际可见。例如[navController.visibleViewController.view addSubview:aColorFulView];
其中aColorFulView
在视觉上显而易见UIView
。
答案 1 :(得分:1)
-popToViewController允许您将控制器弹出堆栈。你想要做的是将新的viewControllers推送到堆栈上,所以使用:
[self.navigationController pushViewController: self.statusView animated: YES];