isUserInteractionEnabled = false 仍然允许双击手势
isUserInteractionEnabled = false still allows double tap gesture
我为 Collection 视图创建了双击手势。当 Collection 视图中的单元格被双击时,我会禁用用户与该单元格的交互。这使我无法在进程运行时单击该单元格。但是我仍然可以双击再次运行该过程的单元格。我仍然希望双击可以用于 collection 中的其他单元格,我只是想为 运行 进程的单元格禁用它。该过程完成后,用户交互将重新打开,希望也可以双击。
这就是我在持有 Collection 视图的视图控制器的 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 视图的双击手势一样,我无法双击其他单元格。而且我什至不知道如何设置它,以便双击只能在单元格中使用,而不是 Collection 视图。
在您的 collectionView
的任何子视图上禁用 isUserInteractionEnabled
仍会将事件传递给 collectionView
(超级视图)。因此 isUserInteractionEnabled
禁用所有子视图上的触摸事件,但不禁用父视图上的触摸事件,在本例中是 collectionView。
您有几个选择可以继续:
- 创建自定义
UICollectionViewCell
并添加 UITapGestureRecognizer
以在内部处理双击,然后委托双击事件。
- 在
didDoubleTap
方法中检查您刚刚双击的单元格是否为 enabled/disabled。您可以使用 indexPathForItemAtPoint:
然后使用 cellForItemAtIndexPath:
. 来完成此操作
您可以在手势识别器上将 isEnabled
设置为 false。
您可以从 gestureRecognizerShouldBegin
实施 UIGestureRecognizerDelegate
和 return false。
我为 Collection 视图创建了双击手势。当 Collection 视图中的单元格被双击时,我会禁用用户与该单元格的交互。这使我无法在进程运行时单击该单元格。但是我仍然可以双击再次运行该过程的单元格。我仍然希望双击可以用于 collection 中的其他单元格,我只是想为 运行 进程的单元格禁用它。该过程完成后,用户交互将重新打开,希望也可以双击。
这就是我在持有 Collection 视图的视图控制器的 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 视图的双击手势一样,我无法双击其他单元格。而且我什至不知道如何设置它,以便双击只能在单元格中使用,而不是 Collection 视图。
在您的 collectionView
的任何子视图上禁用 isUserInteractionEnabled
仍会将事件传递给 collectionView
(超级视图)。因此 isUserInteractionEnabled
禁用所有子视图上的触摸事件,但不禁用父视图上的触摸事件,在本例中是 collectionView。
您有几个选择可以继续:
- 创建自定义
UICollectionViewCell
并添加UITapGestureRecognizer
以在内部处理双击,然后委托双击事件。 - 在
didDoubleTap
方法中检查您刚刚双击的单元格是否为 enabled/disabled。您可以使用indexPathForItemAtPoint:
然后使用cellForItemAtIndexPath:
. 来完成此操作
您可以在手势识别器上将 isEnabled
设置为 false。
您可以从 gestureRecognizerShouldBegin
实施 UIGestureRecognizerDelegate
和 return false。