UItableViewCell嵌套使用UICollectionView,让CollectionView空白部分点击事件传递下去

在UITableViewCell或者其他View里嵌套使用CollectionView场景里,如何在点击CollectionView空白或者没有补全cell的地方,将点击事件传递下去,即TableView的DidSelected的代理方式上面?

示例图

需要实现的效果:

效果

方法1:在部分场景下,我们空白很小,最多的是:没有不全的Cell的位置点击没有反应。

这种情况我们可以补一个空的UICollectionViewCell,将UICollectionViewCell的点击事件通过代理传递出去。也可以手动修改UICollectionView的frame,或者通过贝塞尔曲线绘制边界,但是比较麻烦。

方法2:添加手势。

给UICollectionView加手势,但是UICollectionview的didselect 事件会和手势冲突。
我们可以通过手势的代理解决这个问题:

  func addGes() {
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(collectionViewClick))
        tapGesture.delegate = self
        self.collectionView.addGestureRecognizer(tapGesture)
        
    }
  
    @objc private func collectionViewClick() {
        self.delegate?cellCollectionViewClick(self)
    }

    

class JPDynamicBottomItemView: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        // 当前collectionCell上是图片,那么点击图片就不需要相应手势
        if let view = touch.view, view.isKind(of: UIImageView.self) {
            return false
        }
        return true
    }
}


方法3:利用响应链,让事件传递到tableview上

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        if let view = super.hitTest(point, with: event) {
            if view.isKind(of: UICollectionView.self) {
                return self
            }
        }
        return super.hitTest(point, with: event)
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容