• 实际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];
    }
  • 相关阅读:
    算法与设计模式
    Python开源应用系统
    ASP.NET MVC配置Redis服务
    常用3个框架
    Visual Studio 2015 编译错误 File 的值+乱码的解决方法
    SQL Server2008 R2命令行启动及停止SQL服务的方法
    Linux Shell查看物理CPU个数、核数、逻辑CPU个数
    SQL SERVER 2008R2 执行大脚本文件时,管理工具提示“内存不足”的解决方法
    MVC中未能加载程序集System.Web.Http/System.Web.Http.WebHost
    Windows10中启用原来的Windows照片查看器方法
  • 原文地址:https://www.cnblogs.com/zhaohanjun/p/4726736.html
Copyright © 2020-2023  润新知