我有一个导航堆栈如下:
VcA - > VcB - > VCC
当我按下VcC navigationBar上的后退按钮时,我想去VcA。
我尝试[self.navigationController popToRootViewControllerAnimated:YES]
,但首先弹出VcB然后转到VcA。
我也试过这个:
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers];
[navigationArray removeObjectAtIndex: 1];
self.navigationController.viewControllers = navigationArray;
但它不起作用。它仍然显示VcB然后显示VcA。
我在VcC的viewWillDisappear
中尝试了上述两个代码。
请帮助我该如何解决这个问题。感谢
答案 0 :(得分:1)
viewWillDisappear
操作视图控制器堆栈为时已晚;过渡到视图控制器B已经在进行中。您应该使用viewDidAppear
中的第二个代码块修改堆栈,以便在点击后退按钮时导航控制器转换回视图控制器A
答案 1 :(得分:0)
试试这个:
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
答案 2 :(得分:0)
这可以通过以下方式轻松完成:
<强> 1。获取堆栈中存在的所有控制器的数组
NSArray *controllers = [self.navigationController viewControllers];
<强> 2。然后告诉导航控制器弹出到特定索引处的控制器(例如0):
[self.navigationController popToViewController:[controllers objectAtIndex:0] animated:YES];
答案 3 :(得分:-1)
尝试使用pop而不使用动画, 即[self.navigationController popToRootViewControllerAnimated:NO] -