在滚动期间点击时,UICollectionView 不再识别单元格上的点击?

Posted

技术标签:

【中文标题】在滚动期间点击时,UICollectionView 不再识别单元格上的点击?【英文标题】:UICollectionView does not recognize tap on cell anymore when tapped during scrolling? 【发布时间】:2016-04-17 12:12:38 【问题描述】:

UICollectionView 出现,并且无需滚动触摸其中一个单元格即可立即在 collectionView(_:didSelectItemAtIndexPath:) 中识别。

但是,当滚动 UICollectionView 并点击单元格以停止滚动移动时,不再识别单元格上的后续点击,并且不会触发 collectionView(_:didSelectItemAtIndexPath:)

只有在没有点击的情况下滚动自行停止时,才会识别后续点击。

我已经设置好了

collectionView.delaysContentTouches = false
collectionView.canCancelContentTouches = false

override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool 
    return true

旁注:

单元格包含一个UIImageView 子视图作为完整封面。 UICollectionView 位于UITabelViewCell 内部,后者位于UIScrollView 内部,但我已经设置了scrollEnabled = falsecanCancelContentTouches = false

在设置 collectionView.allowsSelection = false 并向单元格添加 UITapeGestureRecognizer 时会发生相同的行为。

为什么无法识别单元格上的点击?

更新:另一个奇怪的效果是,当UICollectionView 滚动到其内容之外的区域以使其反弹时,它不会反弹而是停止滚动并停止查看释放平底锅后快速敲击一个单元格。在那种状态下,不会识别任何水龙头,因此这与上述行为基本相同。

【问题讨论】:

【参考方案1】:

这种行为的原因是集合视图位于视图控制器的视图中(简化,不要介意强制展开):

UIApplication.sharedApplication().windows.last?.makeKeyAndVisible()
let parentViewController = UIApplication.sharedApplication().keyWindow!.rootViewController
parentViewController.presentViewController(self, animated: true, completion: nil)

解决方案是删除整个第一行makeKeyAndVisible

【讨论】:

以上是关于在滚动期间点击时,UICollectionView 不再识别单元格上的点击?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView 中的图像在向下滚动时会自动翻转?

UICollectionView 神秘地延迟触摸直到滚动

UICollectionView 中水平滚动的单元格消失

在滚动期间重用 UICollectionViewCells

UISwitch 的 UICollectionview 点击事件

UICollectionView 点击选择多个单元格