如何在 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 上的触摸?

UICollectionView:如何检测滚动何时停止

如何检测滚动到水平 UICollectionView 的末尾

iOS UICollectionView 检测是不是有不可见的单元格

UICollectionView 检测滚动方向和更改图像

检测用户将项目拖出 UICollectionView?