如何捕获UITableViewCell内嵌UICollectionView的滚动事件
解决方案
你可以按以下优先级排查问题:
第一步:检查CollectionView的代理是否正确绑定
你当前只是让ProductCollectionViewCell遵守了UIScrollViewDelegate相关的代理协议,但需要在cell初始化、或者xib加载完成后,手动给内部的productsCollectionView绑定代理:// 放在cell的初始化、awakeFromNib等生命周期方法里 productsCollectionView.delegate = self productsCollectionView.dataSource = self这是代理回调不触发的最高频原因。
第二步:解决滚动手势冲突
外层UITableView和内层UICollectionView都是滚动视图,默认手势会互斥,你可以添加手势代理方法允许同时识别:// 给productsCollectionView的手势设置代理 productsCollectionView.panGestureRecognizer.delegate = self // 实现手势代理方法 extension ProductCollectionViewCell: UIGestureRecognizerDelegate { func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { return true } }第三步:检查交互配置是否正常
确认以下配置没有被误改:productsCollectionView.isUserInteractionEnabled = true- 没有其他上层视图盖在CollectionView上拦截触摸事件
- 外层UITableView没有配置禁止子视图响应事件的相关属性
以上步骤都验证完成后,cell内的CollectionView滚动代理即可正常触发,后续再在startScroll()方法里把当前滚动到的分类信息通过代理或者闭包传递给外层Controller,就可以实现和顶部分类栏的联动。
内容的提问来源于stack exchange,提问作者nabiullinas
相关产品推荐
相关产品推荐

