鉴于以下情况:
有一个包含UICollectionViewCells的UICollectionView(当然)。每个UICollectionViewCell都包含一个UIButton,其中包含与之关联的目标操作。
问题:
UICollectionView在滑动/拖动时不滚动。相反,UIButtons会拦截触摸,并且难以拖动UICollectionView。
此外:
UIButtons设置为UIControlEventTouchUpInside UICollectionView设置为canCancelTouches = YES
**为什么UICollectionViewCells中的UIButtons阻止UICollectionView响应拖动/滑动手势? **
答案 0 :(得分:0)
UICollectionView无法正确滚动的原因是因为UIButtons正在拦截并重新路由响应者链。
解决方案:
从UICollectionViewCell中删除UIButtons 而是使用UICollectionViewDelegate的委托方法:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
说明:
当我们向UICollectionViewCell添加UIButton时,我们认为捕获tap的最佳方法是向单元格添加一个按钮。但是,通过添加UIButton,我们打破了响应者链。
我们不需要UICollectionViewCell内的按钮,因为UICollectionViewCell已经使用它的委托方法检测了tap事件:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
使用提供的方法检测集合单元格上的点击,并用UIImageView-s或类似的替换UIButtons。
使用收集单元格时,我们不需要处理按钮的事件。