swift UICollectionView UITableView手势冲突

在自定义view中添加了点击手势,那点击UICollectionViewUITableViewcell时不响应其didSelect代理方法,原因是手势冲突了

2种方法

  • 给view设置restorationIdentifier
let lbTap = UITapGestureRecognizer(target: self, action: #selector(xxx))
lbTap.delegate = self
vBg.addGestureRecognizer(lbTap)
vBg.restorationIdentifier = "vBg"
  • 在手势代理中判断view的类型
//
// MARK: - cell item点击和 vBg的点击冲突
//
extension XXXView: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        
        ///第一种 1.设置view的identify
        if let identify = touch.view?.restorationIdentifier {
            return identify == "vBg"
        }
        
        ///第二种 2.判断view的类型
        let clsTouch = NSStringFromClass((touch.view?.classForCoder)!)
        
        var clsSuper = ""
        if let supCls = touch.view?.superview, let suppCls = supCls.superview {
            clsSuper = NSStringFromClass(suppCls.classForCoder)
        } else {
            return true
        }
        
        ///UICollectionView UITableView就拦截点击事件
        if clsTouch.hasPrefix("UITableView") || clsTouch.hasPrefix("UICollectionView") ||
            clsSuper.hasPrefix("UITableView") || clsSuper.hasPrefix("UICollectionView") {
            return false
        }
        
        return true
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 因为要结局swift3.0中引用snapKit的问题,看到一篇介绍Xcode8,swift3变化的文章,觉得很详细...
    uniapp阅读 10,034评论 0 12
  • 7、不使用IB是,下面这样做有什么问题? 6、请说说Layer和View的关系,以及你是如何使用它们的。 1.首先...
    AlanGe阅读 4,075评论 0 1
  • 代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...
    云之君兮鹏阅读 5,199评论 0 2
  • 我是一个马来西亚大二的学生。我在马来西亚念着与中国高三同等的大学预科时,曾经在第二次的大考失利,所以达不到会计系的...
    mandy_ong阅读 3,222评论 0 0