美文网首页iOS DevelopmentiOS学习征服iOS
iOS ---- 自定义返回按钮图片和侧滑返回失效问题

iOS ---- 自定义返回按钮图片和侧滑返回失效问题

作者: 71150ce14a00 | 来源:发表于2017-02-10 14:49 被阅读159次

    我们可以 创建一个类继承UINavigationController也可以在BaseViewController中写,我这里是从navigationcontroller中写的
    项目传送门
    在继承UINavigationController的类中 实现方法

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        if self.viewControllers.count > 0 {
            //重写返回按钮
            let btn = UIButton.init(type: .custom)
            btn.frame = CGRect.init(x: 0, y: 0, width: 50, height: 44)
            btn.addTarget(self, action: #selector(popToPre), for: .touchUpInside)
            btn.setImage(UIImage.init(named: "back"), for: .normal)
            btn.imageEdgeInsets = .init(top: 0, left: -30, bottom: 0, right: 0)
            let leftNavItem = UIBarButtonItem.init(customView: btn)
            viewController.navigationItem.leftBarButtonItem = leftNavItem
            
            // 动态隐藏tabbar 
        viewController.hidesBottomBarWhenPushed = true
        }
        super.pushViewController(viewController, animated: true)
    }
      // 之所以不用系统的popViewController 是因为tabbar 返回动画bug
     func popToPre()
    {
        self.popViewController(animated: true)
    }
    

    这样一个自定义按钮就完成了, 不过当你完成的时候你会发现,侧滑返回手势失效了

    不用担心 看这里 ——————————

    同样也是在继承UINavigationController的类中实现UINavigationControllerDelegate代理
    在viewDidLoad中

      var popDelegate: UIGestureRecognizerDelegate?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.popDelegate = self.interactivePopGestureRecognizer?.delegate
        self.delegate = self
    }
    

    接下来实现Navigation代理方法

      //UINavigationControllerDelegate方法
    func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
        //实现滑动返回功能
        //清空滑动返回手势的代理就能实现
        if viewController == self.viewControllers[0] {
            self.interactivePopGestureRecognizer!.delegate = self.popDelegate
        }
        else {
            self.interactivePopGestureRecognizer!.delegate = nil
        }
    }
    

    这样侧滑返回手势就添加上去了,利用UIGestureRecognizerDelegate还可以添加全局滑动返回手势
    这里就不详细说明......

    相关文章

      网友评论

      本文标题:iOS ---- 自定义返回按钮图片和侧滑返回失效问题

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