如何在 UICollectionView 中检测“仅单指”单元格上的双击?
Posted
技术标签:
【中文标题】如何在 UICollectionView 中检测“仅单指”单元格上的双击?【英文标题】:How to detect double-taps on cells "only for a single finger" in a UICollectionView? 【发布时间】:2019-06-13 08:01:34 【问题描述】:我有一个 UICollectionView
包含很多单元格。
我实现了两个功能:
-
单击一个单元格:推送一个视图。
双击一个单元格:按 B 视图。
问题来了:
如果我同时点击两个(或更多)单元格,它只会推送 1 一个视图。在这种情况下没问题。
但是,如果我同时双击两个单元格(或更多),它会一个一个地推动 2 个(或更多) B 视图。这会导致意外行为,并且应用有时会崩溃。
当有超过 2 个单元格被点击时,如何禁用其他单元格接收双击,并且只允许推送“1 B 视图”?
我加了doubleTapGesture.numberOfTouchesRequired = 1
,但是不行。
这是我的代码:
@objc private func didReceiveDoubleTap(_ sender: ASCellNode)
self.doubleTapDelegate?.myCellWasDoubleTapped?(self)
override func didLoad()
super.didLoad()
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(MyCollectionCell.didReceiveDoubleTap(_:)))
doubleTapGesture.numberOfTapsRequired = 2
doubleTapGesture.delaysTouchesBegan = true
self.view.addGestureRecognizer(doubleTapGesture)
【问题讨论】:
【参考方案1】:看看你是否可以通过布尔检查来防止多次调用委托方法。
@objc private func didReceiveDoubleTap(_ sender: ASCellNode)
if !processing
processing = true // set processing = false where it's safe to do so.
self.doubleTapDelegate?.myCellWasDoubleTapped?(self)
【讨论】:
以上是关于如何在 UICollectionView 中检测“仅单指”单元格上的双击?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测滚动到水平 UICollectionView 的末尾