从导航堆栈 - iOS中删除中间视图控制器

时间:2016-08-30 10:39:08

标签: ios objective-c iphone uinavigationcontroller poptoviewcontroller

我有一个导航堆栈如下:

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中尝试了上述两个代码。

请帮助我该如何解决这个问题。感谢

4 个答案:

答案 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] -