如何在UINavigationController堆栈中“弹出”多个视图控制器?

8
在我的应用程序中,我正在实现UINavigationController。有几个UIViewControllers被推入堆栈。
当我到达最后一个时,我希望在用户操作时弹出除第一个UIViewController之外的所有UIViewControllers。我该如何做?
我知道如何弹出最后一个,但是如何指示所有以前的UIViewControllers也消失呢?
3个回答

22
你可以尝试使用popToRootViewControllerAnimated:popToViewController:animated:popViewControllerAnimated:这些消息,它们属于UINavigationController

+1,popToRootViewControllerAnimated: 是他正在寻找的。 - sergio
这并不会卸载堆栈上的视图控制器...如果我想做到这一点,我需要做什么? - SuperString

9
在您的情况下,使用Irene建议的popToRootViewControllerAnimated:确实非常有用,但如果有人需要弹出确切数量的控制器,则以下代码可能会有用:
- (void) popControllersNumber:(int)number
{
    if (number <= 1)
        [[self navigationController] popViewControllerAnimated:YES];
    else
    {
        NSArray* controller = [[self navigationController] viewControllers];
        int requiredIndex = [controller count] - number - 1;
        if (requiredIndex < 0) requiredIndex = 0;
        UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:requiredIndex];
        [[self navigationController] popToViewController:requireController animated:YES];
    }
}

3

使用

 TravelViewController *travelView = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-3];
 [self.navigationController popToViewController:travelView animated:YES];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接