我为我的收藏 View 创建了一个双击手势。当双击集合 View 中的单元格时,我会禁用与单元格的用户交互。这使我无法在进程运行时单击该单元格。但是,我仍然可以双击再次运行该过程的单元格。我仍然希望双击可用于集合中的其他单元格,我只想为正在运行的单元格禁用它。该过程完成后,用户交互将重新打开,并希望也双击。

所以这就是我在持有集合 View 的 View Controller 的 viewDidLoad 中定义双击的方式:

    // add gesture recogniser
    let doubleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(didDoubleTap))
        doubleTap.numberOfTapsRequired = 2
        doubleTap.delaysTouchesBegan = true
    self.collectionView.addGestureRecognizer(doubleTap)

我只是在需要时根据进程状态像往常一样切换 userInteraction。
cell.isUserInteractionEnabled = false
cell.isUserInteractionEnabled = true

我不知道如何处理这个问题,就像我禁用了集合 View 的双击手势一样,我不能双击其他单元格。而且我什至不知道如何设置它,以便双击仅在单元格中可用,而不是在集合 View 中可用。

最佳答案

isUserInteractionEnabled 的任何 subview 上禁用 collectionView 仍会将事件传递给 collectionView( super View )。因此 isUserInteractionEnabled 在所有 subview 上禁用触摸事件,但不在超 View 上禁用,在这种情况下是 collectionView。

您有几个选项可以继续:

  • 创建自定义 UICollectionViewCell 并添加 UITapGestureRecognizer 以在内部处理双击,然后委托(delegate)双击事件。
  • didDoubleTap 方法中检查您刚刚双击的单元格是否已启用/禁用。您可以通过使用 indexPathForItemAtPoint:cellForItemAtIndexPath: 来做到这一点。
  • 关于swift - isUserInteractionEnabled = false 仍然允许双击手势,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41904893/

    10-13 05:09