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

Remove intermediate View Controllers from Navigation Stack - iOS

我有一个导航堆栈如下:

VcA -> VcB -> VcC

当我在VcC导航栏上按下后退按钮时,我想转到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中尝试了以上两个代码。

请帮忙解决这个问题。谢谢

试试这个:

for (UIViewController *controller in self.navigationController.viewControllers)
    {
        if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
        {
            [self.navigationController popToViewController:controller animated:YES];

            break;
        }
    }

尝试在没有动画的情况下弹出到root, 即 [self.navigationController popToRootViewControllerAnimated:NO] –

这很容易完成:

1.获取堆栈中存在的所有控制器的数组

NSArray *controllers = [self.navigationController viewControllers];

2。然后告诉导航控制器弹出到特定索引处的控制器(例如 0):

[self.navigationController popToViewController:[controllers objectAtIndex:0] animated:YES];

viewWillDisappear来不及操作视图控制器堆栈;向视图控制器 B 的过渡已经在进行中。您应该使用 viewDidAppear 中的第二个代码块修改堆栈,以便在点击后退按钮时导航控制器转换回视图控制器 A