首页 > 解决方案 > UITableViewCell 不拦截滚动事件

问题描述

我有一个 tableView,其中一些单元格中有一个UICollectionView(用于水平轮播)。它适用于每个单元格,除了无法滚动 tableView 的单元格(在模拟器或设备上)。更准确地说,如果触摸发生在 上,则滚动是可能的UICollectionViewCell,但如果它发生在UITableViewCell不包含 的部分上,则滚动是可能的UICollectionVIew

我想知道为什么会这样,但我不确定如何调试它。是否有一个断点,也许是一个符号断点,我可以设置它来了解触摸事件的去向?

我尝试用这 3 种方法(从单元格本身)打印东西,看看它们是如何以及何时被调用的,但没有被调用。

override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool 

override func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) 

我不确定发布代码是否相关。这是一个复杂的视图,有许多重叠的部分。我更喜欢在这种情况下有用的任何调试技术。

非常感谢!

编辑

这里有更多的精度:

UITableView除了 和 之外,没有其他手势UICollectionView

我的视图层次结构是这样的:

|--- UITableViewCell --------------|
|-|---cell's content view -------|-|
|-|-|---container view --------|-|-|
|-|-|-|---labels ------------|-|-|-|
|-|-|-|---collection view ---|-|-|-|
|-|-|-|----------------------|-|-|-|
|----------------------------------|

单元格内容视图内的容器视图有其用途。但我觉得正是那个视图阻止了滚动手势。

除了isUserInteractionEnable = true,还有什么可以阻止手势事件上升到超级视图的吗?此容器视图没有附加任何手势。

标签: iosuitableviewuicollectionview

解决方案


我最终通过将容器视图的背景颜色从 .clear 更改为一些灰色来使其工作。

我很困惑它是否有效,因为透明视图(颜色:.clear)应该参与事件响应者链。但话虽如此,从容器视图到 tableView,一切都设置为 .clear。所以显示的颜色是 viewController 的背景颜色。

不过,我不确定这是我的错误设置还是 UIKit 中的错误。我猜是在我身上?无论如何......我把这个留在这里,以防其他人遇到这个问题。


推荐阅读