美文网首页iOSiOS_慢条斯理
iOS导航返回指定控制器

iOS导航返回指定控制器

作者: 一抹远方 | 来源:发表于2018-05-24 15:48 被阅读170次

    导航控制器原理:

    1. 导航控制器:是一个容器视图控制器,专门用来管理其他的视图控制器,导航控制器管理的视图控制器在导航控制器中的存储结构是栈结构;
    2. 导航控制器永远显示栈顶的那个视图控制器,
    3. 让一个导航控制器去管理其他视图控制器的方法:
      (1) 将视图控制器作为导航控制器的根视图控制器,
      (2) 使用导航控制器push出来的视图控制器,也是属于导航控制器的视图控制器
    __block BOOL isPop = NO;
        //采用倒序循环返回到离当前控制器最近的匹配控制器(根据需求确定)
        [self.navigationController.viewControllers enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(__kindof UIViewController * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            NSString *vcName = NSStringFromClass([obj class]);
            NSLog(@"控制器名称: %@ index=%ld", vcName, idx);
            
            if ([vcName isEqualToString:NSStringFromClass([FirstViewController class])] ||
                [vcName isEqualToString:NSStringFromClass([SecondViewController class])]) {
    
                [self.navigationController popToViewController:obj animated:YES];
                isPop = YES;
                *stop = YES;
            }
        }];
    
        //栈中未找到匹配的控制器时统一返回
        if (!isPop) {
            self.tabBarController.selectedIndex = 0;
            [self.navigationController popToRootViewControllerAnimated:YES];
        }
    

    若需要删除当前控制器,比如:订单确认页面跳转到支付页面,无论是否成功皆不会返回到此界面时。

    NSMutableArray*vcMutArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    [vcMutArr removeObject:self];
    [self.navigationController setViewControllers:vcMutArr animated:YES];
    

    需求若为删除多个控制器,可结合倒序遍历可变数组删除目标控制器,然后赋值给导航控制器的方式。

    首次写技术性的东西,若发现错误,欢迎斧正,我会及时更新,感激不尽!

    相关文章

      网友评论

        本文标题:iOS导航返回指定控制器

        本文链接:https://www.haomeiwen.com/subject/bvesjftx.html