isUserInteractionEnabled = false仍允许双击手势

时间:2017-01-27 23:55:27

标签: swift uicollectionview uigesturerecognizer

我为我的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

我不知道如何处理这个,好像我禁用了Collection View的双击手势我不能双击其他单元格。我甚至不知道如何设置它,以便双击仅在单元格中可用,而不是集合视图。

2 个答案:

答案 0 :(得分:1)

isUserInteractionEnabled的任何子视图中停用collectionView仍会将事件传递给collectionView(超级浏览)。所以isUserInteractionEnabled禁用所有子视图上的触摸事件,但不禁用超级视图,在这种情况下是超级视图。

您有几个选择可以继续:

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

答案 1 :(得分:0)

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

您可以实施UIGestureRecognizerDelegate并从gestureRecognizerShouldBegin返回false。