iOS 点击UIbarbuttonItem调用pushViewC

2023-05-21  本文已影响0人  黑炭长

问题描述:

在UINavigationController的rootViewController页面设置了leftBarbuttonitem & rightBarbuttonItem 之后执行若干操作后,经测试发现执行侧滑返回操作,rootViewController侧滑没反应,继续多侧滑几下,然后点击按钮执行push操作,多试几次发现会卡屏,页面卡死,进查看页面布局,页面已经push,但是当前页面没有刷新,初步判断是侧滑pop操作于push方法的冲突导致

修正方法


override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        
        let vc = viewController as! DNBaseViewController
        
       
        self.interactivePopGestureRecognizer?.isEnabled = false
        
        
        super.pushViewController(viewController, animated: animated)
    }
    
    override func popViewController(animated: Bool) -> UIViewController? {
        if self.viewControllers.count == 1 {
            
            self.interactivePopGestureRecognizer?.isEnabled = false
        }
        return super.popViewController(animated: animated)
    }

    
    override func popToRootViewController(animated: Bool) -> [UIViewController]? {
       
        self.interactivePopGestureRecognizer?.isEnabled = false
        return super.popToRootViewController(animated: animated)
    }
    
    override func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? {
        if self.viewControllers.count == 1 {
            
            self.interactivePopGestureRecognizer?.isEnabled = false
        }
        return super.popToViewController(viewController, animated: animated)
    }


extension DNBaseNavigationViewController : UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {
        self.interactivePopGestureRecognizer?.isEnabled = true
        if self.viewControllers.count < 2 || self.visibleViewController == self.viewControllers.first {
            self.interactivePopGestureRecognizer?.isEnabled = false
        }
    }
}

extension DNBaseNavigationViewController : UIGestureRecognizerDelegate {
    
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        if self.viewControllers.count < 2 || self.visibleViewController == self.viewControllers.first {
            return false
        }
        
        return true
    }
    
}

再次同样方法测试 没发现问题

上一篇 下一篇

猜你喜欢

热点阅读