1

我有一个UICollectionViewController,并且这个集合的单元格有一个子视图 - 比如说 A- 与单元格边界具有相同的框架。

问题是当我点击这些单元格时,collectionView:didSelectItemAtIndexPath不会被调用。我还将 A 的 ExclusiveTouch 设置为 YES,但仍然没有。而且当我将A的框架更改为更小的尺寸时,点击剩余区域会触发collectionView:didSelectItemAtIndexPath,没问题。

那时我实际上应该做什么才能使这个collectionView委托在A的边界与单元格相同的地方被调用。

我将不胜感激任何评论。

4

5 回答 5

5

如果我正确理解了您的问题,则您的 UICollectionViewCells 中包含子视图。为了触发 didSelectItemAtIndexPath 触摸子视图,您需要在界面构建器中禁用“启用用户交互”。我的集合视图单元格中有一个 UIButton 作为子视图,这对我有用。

于 2016-01-03T04:11:58.663 回答
1

设置exclusiveTouch为 YES 会导致接收器阻止将触摸事件传递到同一窗口中的其他视图。所以把它留给NO

否则,如果您的子视图UIImageView设置userInteractionEnabled为 YES

否则,如果您的子视图是UIButton或其他UIControl将捕获点击手势的子类,您需要将其更改为普通UIView子类

于 2015-06-24T08:35:30.123 回答
0

检查你的方法是它- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath还是- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath

它有时会发生。

您是否禁用了单元格的用户交互属性,请检查一次。

于 2015-06-24T08:31:20.853 回答
0

该方法应该override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 并确保:

  • 单元格本身已选中用户交互启用(在您的故事板中)
  • 此单元格的所有子项也已选中用户交互启用

您可以在属性检查器中找到此复选框。

于 2015-06-24T08:39:05.123 回答
0

我正在添加我的愚蠢答案,以防万一它对其他人有所帮助。在您的视图控制器中记得设置集合视图的委托

collectionView.delegate = self
于 2020-11-27T11:28:37.030 回答