0

我有一个导航堆栈如下:

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。

viewWillDisappear我在VcC中尝试了上述两个代码。

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

4

4 回答 4

1

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

于 2016-08-30T11:44:50.130 回答
0

尝试这个:

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

            break;
        }
    }
于 2016-08-30T10:42:09.017 回答
0

这很容易通过以下方式完成:

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

NSArray *controllers = [self.navigationController viewControllers];

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

[self.navigationController popToViewController:[controllers objectAtIndex:0] animated:YES];
于 2016-08-30T11:27:39.553 回答
-1

尝试无动画弹出到root,即[self.navigationController popToRootViewControllerAnimated:NO] –

于 2016-08-30T11:10:31.727 回答