美文网首页
如何实现UINavigationController控制下的控制

如何实现UINavigationController控制下的控制

作者: 骄阳Niki | 来源:发表于2016-05-20 21:24 被阅读796次

    今天 有人给我提出了一个这样一个功能实现需求 : 假如有三个控制器 有 被同一个导航控制器所管理着 根控制器推到第二个 第二个推到第三个 导航栏自带的返回按钮是回到上一级界面 现在要求从第三个导航栏的barButton pop回到第一个也就是根视图控制器
    你肯定说这个问题非常简单啊 直接自定义第三个控制器的导航栏的leftBarButton就行了呗 在其触发方法里指定他

    [self.navigationController popToRootViewControllerAnimated:YES]
    

    但是事情远远没那么简单 iOS7.0之后 苹果新推出的一个小功能 就是对于UINavagationController堆栈里的UIViewController,只要轻轻在视图控制器的左边缘右滑一下,该视图控制器就会pop出栈(前提当然是对于非根视图控制器而言)

    现在的要求是不光是点击导航栏的leftBarButton 能回到第一个界面
    左侧边缘右滑也要回到第一个界面 而在你自定义完barButton之后 你会发现左侧边缘右滑 再怎么滑也滑不过去啦

    这时候你可能会想那我再加一个手势呗
    这里先尝试家里一个轻扫手势

    
    #import "ThirdViewController.h"
    
    @interface ThirdViewController ()
    
    @end
    
    - (void)viewDidLoad {
    
     UISwipeGestureRecognizer *swiper = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swiperAction)];
        swiper.direction = UISwipeGestureRecognizerDirectionRight;
        [self.view addGestureRecognizer:swiper];
        
    }
    
    - (void)swiperAction
    {
     [self.navigationController popToRootViewControllerAnimated:YES];
    }
    

    这样写完以后 果然实现了 从第三个界面的左侧边缘右滑 pop回到第一个界面

    你可能会想 so easy 但是 大哥 可别高兴地太早 来自汪星的某产品经理又会说:"no no no 这跟我要的差远了 你这只是突兀地一下跳到第一个界面了 而人家苹果自带的边缘右滑 却可以慢慢滑动 看到过程 " 于是乎 你不得不又投入到代码中

    实现的方式应该有很多 今天我教大家一种简单易懂的方法 仅用几行代码就OK啦 根本不用添加手势神马的 既然第二个界面被推出来之后 退出第三个界面之后 暂时用不到了 而它又称为界面一和界面三之间的一到屏障 我们不妨在界面二视图小时之后 将它从
    self.navigationController.viewControllers 中移除掉 这样界面三再返回时 界面二已经不在栈中 此时栈中只有界面一和界面三两个控制器 pop 完全无障碍
    看代码

    
    #import "SecondViewController.h"
    #import "ThirdViewController.h"
    @interface SecondViewController ()
    
    @end
    - (void)viewDidDisappear:(BOOL)animated
    {
       [super viewWillDisappear:animated];
       NSMutableArray *vcArr = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
       [vcArr removeObject:self];
       self.navigationController.viewControllers = vcArr;
    }
    

    如此这样便可 可是亲爱的们 别忘了 界面三的leftBarButton自定义之后 左侧边缘右滑的手势已不复存在 别着急 一行代码就可以解决这个问题 关于这个问题 我另一篇文章中有专门做解释 http://www.jianshu.com/p/ef58a80f6b78

    self.navigationController.interactivePopGestureRecognizer.delegate = nil;
    

    现在再运行看看 是不是效果完美

    屏幕快照 2016-05-20 21.19.29.png

    相关文章

      网友评论

          本文标题:如何实现UINavigationController控制下的控制

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