首页 > 解决方案 > 如何弹回 rootViewController +1?

问题描述

我需要弹回许多视图,但不是一直返回到根控制器,除了使用以下方法一直返回之外,我找不到其他方法

[self.navigationController popToRootViewControllerAnimated:YES];

我如何弹回 root + 1 ?

标签: objective-cuiviewcontroller

解决方案


如果您知道要支持的视图控制器。

 UIViewController *targetVC = XXViewController.class ;
NSArray <UIViewController *>*vcs = self.navigationController.viewControllers ;
[vcs enumerateObjectsUsingBlock:^(UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    if ([obj isKindOfClass:targetVC.class]) {
        [self.navigationController popToViewController:obj animated:YES];
        *stop = YES ;
    }
}];

如果您知道要备份的索引。

 NSInteger index = 1 ;
[self.navigationController popToViewController:vcs[index] animated:YES];

跟随不重要

当前您在导航中有 AA,BB 两个视图控制器。您转到 DD viewcotrlooer 并且不想在返回时显示最后一个视图控制器。当您弹出 DD viewcotrller 时,您可以使用以下代码。最重要的是支持侧滑。

[self skipCurrentViewcontrollerToViewcontroller:DD.new];


 - (void)skipCurrentViewcontrollerToViewcontroller:(UIViewController *)toVC
{
    if (self.navigationController == nil) {
        NSAssert(NO, @"the navigation is empty!");
        return ;
    }
    NSArray *vcArray = self.navigationController.viewControllers ;
    if (vcArray.count > 0) {
        NSMutableArray *desArray = [NSMutableArray arrayWithCapacity:4];
        for (int i = 0 ;i < vcArray.count - 1 ; i++) {
            [desArray addObject:vcArray[i]];
        }
        [desArray addObject:toVC];
        [self.navigationController setViewControllers:desArray animated:YES];
    }
    else{
        [self.navigationController pushViewController:toVC animated:YES];
    }
}

推荐阅读