zoukankan      html  css  js  c++  java
  • iOS 7.0自定义导航栏后返回按钮失效

     iOS 7.0自定义导航栏后返回按钮失效(leftBarButtonItem使用后

    两种解决办法

    第一种(比较简单但有缺陷,缺陷稍后再说)

    1、自定义导航栏遵守UINavigationBarDelegate协议
    2、实现UINavigationBarDelegate的两个方法

    自己最好建一个UINavigationController子类(我这里是CihonNavViewController)代码如下:

    - (void)viewDidLoad {
        [super viewDidLoad];
        __weak CihonNavViewController *weakSelf = self;
        
        if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)])
        {
            self.interactivePopGestureRecognizer.delegate = weakSelf;
        }

        // Do any additional setup after loading the view.
    }
    - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {
        //只有一个控制器的时候禁止手势,防止卡死现象
        
        if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            self.interactivePopGestureRecognizer.enabled = NO;
        }
        if (self.childViewControllers.count > 1) {
            if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
                self.interactivePopGestureRecognizer.enabled = YES;
            }
        }
        return YES;
    }
    - (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {
        //只有一个控制器的时候禁止手势,防止卡死现象
        if (self.childViewControllers.count == 1) {
            if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
                self.interactivePopGestureRecognizer.enabled = NO;
            }
        }
    }

    OK搞定,现在Run一下,发现问题已经解决了,他妈的但是来了。发现只有滑返回手势只能靠近屏幕左边缘才能使用

     接下来说第二种解决办法

    setp1:需要获取系统自带滑动手势的target对象
    id target = self.navigationController.interactivePopGestureRecognizer.delegate;


    setp2:创建全屏滑动手势~调用系统自带滑动手势的target的action方法
    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];


    step3:设置手势代理~拦截手势触发
    pan.delegate = self;


    step4:别忘了~给导航控制器的view添加全屏滑动手势
    [self.view addGestureRecognizer:pan];


    step5:将系统自带的滑动手势禁用
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;


    steo6:还记得刚刚设置的代理吗?下面方法什么时候调用?在每次触发手势之前都会询问下代理,是否触发。
    这个方法就是拦截手势触发的方法.
    - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{}
    return NO;则不需要触发滑动手势
    return YES;则需要触发滑动手势


    方法二参考文章如下

  • 相关阅读:
    决策树
    Linux登录指令-ssh
    CentOS下搭建Hive
    server 2008 ftp 环境重点说明
    搭建ftp环境
    supesite 连 discuz 论坛记录
    安装ucenter 步骤详解及supesite 安装详解
    最近打算 学点东西,不能 再这样下去了
    今天知道了一个 反向代理,是apache 的一个功能,这里记录一下
    最近 弄了一个 discuz 7.2,管理员发帖 会出现 很多错误,解决 办法 在别的帖子中找到了
  • 原文地址:https://www.cnblogs.com/yangxiaolong/p/5952641.html
Copyright © 2011-2022 走看看