美文网首页
iOS 点击UIbarbuttonItem调用pushViewC

iOS 点击UIbarbuttonItem调用pushViewC

作者: 黑炭长 | 来源:发表于2023-05-21 14:30 被阅读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
    }
    
}

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

相关文章

网友评论

      本文标题:iOS 点击UIbarbuttonItem调用pushViewC

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