为什么 UICollectionView 不滚动其中的 UIButtons?
Why does UICollectionView not scroll with UIButtons inside it?
给定以下场景:
有一个包含 UICollectionViewCells 的 UICollectionView(自然)。每个 UICollectionViewCell 都包含一个 UIButton 以及与之关联的目标操作。
问题:
UICollectionView 不会在 swipe/drag 上滚动。 UIButtons 反而会拦截触摸,并使拖动 UICollectionView 变得困难。
此外:
UIButton 设置为 UIControlEventTouchUpInside
UICollectionView 设置为 canCancelTouches = YES
**为什么 UICollectionViewCells 中的 UIButton 会阻止 UICollectionView 响应 drag/swipe 手势? **
UICollectionView 不能正常滚动的原因是因为 UIButton 正在拦截并重新路由响应链。
解决方案:
从 UICollectionViewCell 中移除 UIButton。
而是使用 UICollectionViewDelegate 的委托方法:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
解释:
当我们向 UICollectionViewCell 添加一个 UIButton 时,我们认为捕获点击的最佳方式是向单元格添加一个按钮。但是,通过添加 UIButton,我们打破了响应链。
我们不需要 UICollectionViewCell 中的按钮,因为 UICollectionViewCell 已经使用它的委托方法检测点击事件:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
使用提供的方法检测收集单元格上的点击,并将 UIButtons 替换为 UIImageView-s 或类似的。
我们在使用集合单元格时不需要按钮的事件处理。
给定以下场景:
有一个包含 UICollectionViewCells 的 UICollectionView(自然)。每个 UICollectionViewCell 都包含一个 UIButton 以及与之关联的目标操作。
问题:
UICollectionView 不会在 swipe/drag 上滚动。 UIButtons 反而会拦截触摸,并使拖动 UICollectionView 变得困难。
此外:
UIButton 设置为 UIControlEventTouchUpInside UICollectionView 设置为 canCancelTouches = YES
**为什么 UICollectionViewCells 中的 UIButton 会阻止 UICollectionView 响应 drag/swipe 手势? **
UICollectionView 不能正常滚动的原因是因为 UIButton 正在拦截并重新路由响应链。
解决方案:
从 UICollectionViewCell 中移除 UIButton。
而是使用 UICollectionViewDelegate 的委托方法:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
解释:
当我们向 UICollectionViewCell 添加一个 UIButton 时,我们认为捕获点击的最佳方式是向单元格添加一个按钮。但是,通过添加 UIButton,我们打破了响应链。
我们不需要 UICollectionViewCell 中的按钮,因为 UICollectionViewCell 已经使用它的委托方法检测点击事件:
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
使用提供的方法检测收集单元格上的点击,并将 UIButtons 替换为 UIImageView-s 或类似的。
我们在使用集合单元格时不需要按钮的事件处理。