Swift isUserInteractionEnabled=false仍然允许双击手势

Swift isUserInteractionEnabled=false仍然允许双击手势,swift,uicollectionview,uigesturerecognizer,Swift,Uicollectionview,Uigesturerecognizer,我已经为我的收藏视图创建了双击手势。当集合视图中的单元格被双击时,我将禁用与该单元格的用户交互。这使我无法在进程运行时点击该单元格。但是,我仍然可以双击再次运行该进程的单元格。我仍然希望双击对集合中的其他单元格可用,我只想对正在运行进程的单元格禁用双击。当流程完成时,用户交互将重新打开,并希望双击 这就是我在保存集合视图的视图控制器的viewDidLoad中定义双击的方式: // add gesture recogniser let doubleTap: UITapGesture

我已经为我的收藏视图创建了双击手势。当集合视图中的单元格被双击时,我将禁用与该单元格的用户交互。这使我无法在进程运行时点击该单元格。但是,我仍然可以双击再次运行该进程的单元格。我仍然希望双击对集合中的其他单元格可用,我只想对正在运行进程的单元格禁用双击。当流程完成时,用户交互将重新打开,并希望双击

这就是我在保存集合视图的视图控制器的viewDidLoad中定义双击的方式:

    // add gesture recogniser
    let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
        doubleTap.numberOfTapsRequired = 2
        doubleTap.delaysTouchesBegan = true
    self.collectionView.addGestureRecognizer(doubleTap)
我只是在需要时根据进程的状态切换用户交互

cell.isUserInteractionEnabled = false
cell.isUserInteractionEnabled = true

我不知道如何处理这个问题,就好像我禁用了集合视图的双击手势一样,我不能双击其他单元格。我甚至不知道如何设置它,使双击只在单元格中可用,而不在集合视图中可用。

在您的
collectionView
的任何子视图上禁用
isUserInteractionEnabled
仍将事件传递到
collectionView
(superview)。因此,
isUserInteractionEnabled
在所有子视图上禁用触摸事件,但在超级视图上不禁用触摸事件,在本例中,超级视图是collectionView

您有几个选项可以继续:

  • 创建一个自定义
    UICollectionViewCell
    并添加一个
    UIAPTgestureRecognitizer
    以在内部处理双击,然后委派双击事件
  • diddoulletap
    方法中,检查刚才双击的单元格是否已启用/禁用。您可以使用
    indexPathForItemAtPoint:
    然后使用
    cellForItemAtIndexPath:
    来完成此操作

  • 您可以在手势识别器上将
    isEnabled
    设置为false


    您可以实现
    UIgestureRecognitizerDelegate
    并从
    gestureRecognitizerShouldBegin

    返回false谢谢,我直接使用了easy选项并使用了if语句。这似乎是在禁用第一次双击时可见的单元格的点击手势。我会研究委托方法。事实上它确实有效,我只是把我的条件句搞乱了。太好了!很高兴听到这个消息。