collectionView:didSelectItemAtIndexPath不会被点击调用

时间:2015-06-24 08:27:53

标签: ios objective-c uicollectionview uicollectionviewcell uicollectionviewdelegate

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

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

在这一点上我应该做些什么来使这个collectionView委托被调用,其中A的边界与单元格相同。

我将不胜感激。

5 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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

有时会发生。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

我要添加我的愚蠢答案,以防万一它可以帮助别人。 在您的ViewController中,请记住设置collectionview的委托

collectionView.delegate = self