在滚动期间点击时,UICollectionView 不再识别点击单元格?
UICollectionView does not recognize tap on cell anymore when tapped during scrolling?
出现 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 = false
和 canCancelContentTouches = false
.
设置 collectionView.allowsSelection = false
并将 UITapeGestureRecognizer 添加到单元格时会发生相同的行为。
为什么点击单元格无法识别?
更新:另一个奇怪的效果是,当UICollectionView
滚动到其内容之外的区域时,它会反弹回来,但不会反弹而是停止滚动并在释放平底锅后快速点击单元格时停止视图。在那个状态下,没有识别出点击,所以这基本上与上面描述的行为相同。
此行为的原因是集合视图位于视图控制器的视图内,该视图控制器带有(简化的,不要介意强制解包):
UIApplication.sharedApplication().windows.last?.makeKeyAndVisible()
let parentViewController = UIApplication.sharedApplication().keyWindow!.rootViewController
parentViewController.presentViewController(self, animated: true, completion: nil)
解决方案是删除整个第一行 makeKeyAndVisible
。
出现 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 = false
和canCancelContentTouches = false
.
设置 collectionView.allowsSelection = false
并将 UITapeGestureRecognizer 添加到单元格时会发生相同的行为。
为什么点击单元格无法识别?
更新:另一个奇怪的效果是,当UICollectionView
滚动到其内容之外的区域时,它会反弹回来,但不会反弹而是停止滚动并在释放平底锅后快速点击单元格时停止视图。在那个状态下,没有识别出点击,所以这基本上与上面描述的行为相同。
此行为的原因是集合视图位于视图控制器的视图内,该视图控制器带有(简化的,不要介意强制解包):
UIApplication.sharedApplication().windows.last?.makeKeyAndVisible()
let parentViewController = UIApplication.sharedApplication().keyWindow!.rootViewController
parentViewController.presentViewController(self, animated: true, completion: nil)
解决方案是删除整个第一行 makeKeyAndVisible
。