UICollectionView只调用didSelectItemAtIndexPath如果用户双击,不会调用时,用户单击

我有一个关于屏幕大小的UICollectionView。 它显示的UICollectionViewCells与collectionView的大小相同。 每个单元格都有一个UIImage,它是单元格的大小。 CollectionView具有分页function,所以本质上它是一个全屏的照片幻灯片,用户可以滑过。

问题是这样的
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath只在用户用手指敲击单元格或长按一个手指然后释放时才被调用。 它似乎没有单击select的默认行为。 我还没有对CollectionView手势识别器进行任何更改,因此无法find解决此问题的解决scheme。

你确定你不是不小心重写- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath ? Xcode代码完成后,“select”与“取消select”已经让我失望了。

我只是有同样的问题,事实certificate,有一个UITapGestureRecognizerUIView包含UICollectionView ,它是响应而不是。

这就解释了为什么didSelectItemAtIndexPath只在用户用两个手指点击或者用一个手指长时间按下UITapGestureRecognizer因为这不会触发UITapGestureRecognizer

所以,检查所有你得到的UITapGestureRecognizer ,不一定直接在UICollectionView ,但它可以在任何包含它的UIView

如果您对阻止单元格内容视图的单元格有疑问,那么您将无法挂钩到该单元格的代表callback。

您将要禁用在NIB或代码中的障碍视图的用户交互。

view.userInteractionEnabled = NO;

只要在已经解决的问题上再增加一个点击手势可能不起作用的情况,因为这确实使我受到折磨。

如果您在UICollectionViewDelegate'collectionView:shouldHighlightItemAtIndexPath:返回false ,则轻拍手势将不起作用,并且不会调用collectionView:didSelectItemAtIndexPath: collectionView:shouldHighlightItemAtIndexPath: 这个委托方法的默认返回值是true ,所以如果你没有有意实现的话,你就不会有问题。

我自己也遇到了这个问题。 最初我有button和标签,然后我重构我的用户界面,并将这些button/标签转换为UICollectionView单元格。

我终于意识到button正在消耗我的水龙头。 我不假思索地把原来的button移动到单元格中,而不是把它变成一个直的UIImage 。 我已经摧毁了相关的button的动作,只是寻找细胞的select,所以我花了一段时间才弄清楚。

回想起来很愚蠢和明显,但花了我几个小时才明白我所做的。

我只是有同样的问题…我重写touchesBegan在CollectionCell视图,这导致didSelectItemAtIndexPath不触发时,我触摸单元格。 删除覆盖,所有的工作。

我在Swift 3和xcode 8中遇到了这个问题,我有一个视图和一个集合视图里面。集合视图具有userInteractionEnabled为true,仍然没有工作。通过重写shouldHighlightItemAt修复这个问题,我没有任何额外的/自定义实现在这个方法,所以我没有重写这个方法。添加下面的代码didSelectItem方法被调用。

 func collectionView(_ collectionView: UICollectionView, shouldHighlightItemAt indexPath: IndexPath) -> Bool { return true } 

如果您只使用didselect:

 self.collectionView.allowsMultipleSelection = false 

或者删除那一行。

我偶然发现了这个问题,这让我感到沮丧,直到我发现这一点。当我在Storyboard的CollectionView中select左上angular的单元格时, 您只需取消选中“User Interaction Enabled” 。 并解决问题

记得要将UICollectionViewDataSource,UICollectionViewDelegate添加到类中