为什么UICollectionView不能在其中滚动UIButtons?

时间:2015-02-18 06:56:18

标签: ios objective-c uicollectionview

鉴于以下情况:

有一个包含UICollectionViewCells的UICollectionView(当然)。每个UICollectionViewCell都包含一个UIButton,其中包含与之关联的目标操作。

问题:

UICollectionView在滑动/拖动时不滚动。相反,UIButtons会拦截触摸,并且难以拖动UICollectionView。

此外:

UIButtons设置为UIControlEventTouchUpInside UICollectionView设置为canCancelTouches = YES

**为什么UICollectionViewCells中的UIButtons阻止UICollectionView响应拖动/滑动手势? **

1 个答案:

答案 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。

使用收集单元格时,我们不需要处理按钮的事件。