swift - isUserInteractionEnabled = false 仍然允许双击手势

标签 swift uicollectionview uigesturerecognizer

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

这就是我在持有 Collection 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 的双击手势一样,我无法双击其他单元格。而且我什至不知道如何设置它,以便双击仅在单元格中可用,而不是在 Collection View 中可用。

最佳答案

collectionView 的任何 subview 上禁用 isUserInteractionEnabled 仍会将事件传递给 collectionView( super View )。所以 isUserInteractionEnabled 禁用所有 subview 上的触摸事件,但不禁用父 View 上的触摸事件,在本例中是 collectionView。

您有几个选择可以继续:

  1. 创建自定义 UICollectionViewCell 并添加 UITapGestureRecognizer 以在内部处理双击,然后委托(delegate)双击事件。
  2. didDoubleTap 方法中检查您刚刚双击的单元格是否启用/禁用。您可以使用 indexPathForItemAtPoint: 然后使用 cellForItemAtIndexPath: 来执行此操作。

关于swift - isUserInteractionEnabled = false 仍然允许双击手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41904893/

相关文章:

ios - 从 pageViewController 获取 ParentViewController

ios - 在 Xcode 中与您的设备通信时出错

ios - Swift 中带有 UISwitch 状态的 If 语句

ios - 如何在 2 个不同的 UICollectionViewFlowLayout 实例之间切换?

ios - 用两根手指移动两个不同的对象 SpriteKit

ios - 自定义转换给出 "Unbalanced calls to begin/end appearance transitions"错误

IOS:UICollectionView 未在单元格中显示完整图像

ios - 如何从位于 Collection View 单元格内的步进器获取选定的 IndexPath?

swift - Pan 手势和 Tap 手势之间的冲突

iphone - 如何为多个 View 附加一个 UIPanGestureRecognizer 对象?