Ios removeFromParentViewController从堆栈中删除所有视图控制器

Ios removeFromParentViewController从堆栈中删除所有视图控制器,ios,iphone,uiviewcontroller,Ios,Iphone,Uiviewcontroller,在我的应用程序中,我想从视图控制器堆栈中删除视图控制器,然后导航到特定的视图控制器。假设我有一个,B,C,D,E视图控制器堆栈。我希望删除E,然后转到C。我使用以下代码 NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; for (UIViewController *aViewController in allView

在我的应用程序中,我想从视图控制器堆栈中删除视图控制器,然后导航到特定的视图控制器。假设我有一个,B,C,D,E视图控制器堆栈。我希望删除E,然后转到C。我使用以下代码

NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];


for (UIViewController *aViewController in allViewControllers)
    {
        if ([aViewController isKindOfClass:[noNetworkViewController class]])
        {
            [aViewController removeFromParentViewController];
        }
    }


     NSMutableArray *allbViewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]];

    for (UIViewController *aViewController in allbViewControllers)
    {
        if ([aViewController isKindOfClass:[messageViewController class]])
        {
            [self.navigationController popToViewController:aViewController animated:NO];
        }
    }

第一个for循环将从堆栈中删除所有视图控制器。我有什么地方做错了吗。请让我知道。

如果您使用的是pop,则不必从其父视图中删除其他视图。您只需弹出到视图控制器阵列中的视图控制器,然后从堆栈顶部返回两个

我会给出一个代码示例,但我不在我的开发计算机上。如果在明天之前没有人给出更详细的回答,我将添加一些代码

-编辑-这是我用来弹出2个视图控制器的代码行。我相信这可以用更好的方法来做,但它是有效的

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:[self.navigationController.viewControllers count]-3] animated:YES];

是否已验证父视图控制器属性由导航控制器填充?父视图控制器通常用于UIViewControllerContainement协议一致性。UINavigationController不符合该协议,这使我认为您无法通过调用该方法将其从导航控制器中删除。您可以在navigationController上使用–SetViewController:animated:来分配控制器。只需使用您为所有视图控制器创建的数组。

您不应该使用removeFromParentViewController:来处理导航控制器的视图控制器堆栈。曾经这完全是错误的


此外,没有理由循环浏览导航控制器的视图控制器堆栈并逐个弹出它们。有一些方法,如popToViewController:animated:和popToRootViewController,允许您通过一次调用弹出堆栈中的任意视图控制器。

您的其他视图控制器是否继承自noNetworkViewController?转到C应同时删除D和E。@connor-否。它不会继承。