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

Kri*_*lci 53 objective-c ipad ios uicollectionview uicollectionviewcell

我有一个大小与屏幕大小相同的UICollectionView.它显示的UICollectionViewCells与collectionView的大小相同.每个细胞都有一个UIImage,它是细胞的大小.CollectionView启用了分页,因此它实际上是用户可以滑动的全屏照片幻灯片.

问题是
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath只有当用户用两根手指敲击一个小区或长按一根手指然后释放时才会被调用.它似乎没有单击选择的默认行为.我没有对CollectionView手势识别器进行任何更改,因此无法找到解决此问题的方法.

小智 200

你确定你没有意外地压倒一切- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath吗?Xcode的代码完成后,"选择"与"取消选择"在过去使我绊倒了.

  • 我会继续接受你的回答,不是因为它解决了我的问题,而是因为它修复了一个与我非常相似的问题. (2认同)

iDi*_*ent 128

我只是遇到了同样的问题,事实证明有一个UITapGestureRecognizer关于UIView包含它UICollectionView并且它正在响应.

这解释了为什么didSelectItemAtIndexPath只有当用户用两根手指敲击或用一根手指长按时才起作用,因为这不会触发UITapGestureRecognizer.

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

  • 谢谢!设置`[tapGestureRecognizer setCancelsTouchesInView:NO];`为我修复它. (43认同)
  • 我遇到过同样的问题。我有一个 UICollectionView 没有响应 didSelectItemAtIndexPath 因为我在父视图上有一个 tapGesture 识别器。默认情况下,我将 tapGesture 设置为 ```tapGesture?.isEnabled = false```,因此 didSelectItemAtIndexPath 将处理点击。然后,在我需要使用 tapGesture 的上下文中,在我检测远离 UITextField 的点击的情况下,我只需将我的 tapGesture 设置为启用 true,这样我的手势回调将处理点击而不是 didSelectItemAtIndexPath。 (2认同)

Oli*_*son 13

如果您在单元格上有一个视图阻碍了难以处理的单元格内容视图,那么您将无法挂钩该单元格的委托回调.

您将需要在NIB或代码中禁用阻塞视图上的用户交互.

view.userInteractionEnabled = NO;


Bla*_*ard 8

只需添加已经解决的问题,可能无法使用点击手势,因为这确实会让我感到痛苦.

如果你falseUICollectionViewDelegate's 内返回collectionView:shouldHighlightItemAtIndexPath:,则点击手势将不起作用,并且collectionView:didSelectItemAtIndexPath:不会被调用.此委托方法的默认返回值是true,如果您没有故意实现它,则不会出现问题.