zoukankan      html  css  js  c++  java
  • 实际iOS编程中遇到的自定义导航栏按钮,导致手势返回失效的解决方法

    1在实际编程过程中往往需要自定义导航栏上面的按钮,也就用:

    - (instancetype)initWithCustomView:(UIView *)customView;

    但用了这个方法后可能会导致iOS7,8的手势返回失效,解决方法就是在自定义的导航栏的viewDidLoad方法中添加如下代码

    注意:只有用系统的导航栏,或者继承于系统的导航栏才可以用Push方法,并且自带返回手势.

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        __weak typeof (self) weakSelf = self;
        //解决因为自定义导航栏按钮,滑动返回失效的问题
        if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            self.interactivePopGestureRecognizer.delegate = weakSelf;
        }
        
    }

    加了上面这一串代码后,再运行,返回手势就可以正常使用了.

    2另外再教大家一个实用的方法,当Push的多个界面的导航栏返回按钮相同时,可以在自定义的UINavigationController中重写Push的方法,拦截Push操作,

    并同时设置push后的TabBar隐藏(如果有需要的话),代码如下:

    /**
     *  重写这个方法目的:能够拦截所有push进来的控制器
     *
     *  @param viewController 即将push进来的控制器
     */
    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    {
       
    
        if (self.viewControllers.count > 0) { // 这时push进来的控制器viewController,不是第一个子控制器(不是根控制器)
            /* 自动显示和隐藏tabbar */
            viewController.hidesBottomBarWhenPushed = YES;
            
            /* 设置导航栏上面的内容 */
            // 设置左边的返回按钮
            viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithTarget:self action:@selector(back) image:@"home_nav_bar_back_icon" highImage:@"home_nav_bar_back_icon"];
             }
    
        [super pushViewController:viewController animated:animated];
    }
    
    - (void)back
    {
        // 因为self本来就是一个导航控制器,self.navigationController这里是nil的
        [self popViewControllerAnimated:YES];
    }
  • 相关阅读:
    http请求需要了解的一些信息
    mac修改终端配色方案
    SpringBoot之使用Redisson实现分布式锁
    https://coding.m.imooc.com/classindex.html?cid=402
    构建微电影
    一个开源的后台管理项目
    mysql
    redis安装
    maven 安装
    Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑
  • 原文地址:https://www.cnblogs.com/zhaohanjun/p/4726736.html
Copyright © 2011-2022 走看看