ios - 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
,还有什么可以阻止手势事件上升到超级视图的吗?此容器视图没有附加任何手势。
解决方案
我最终通过将容器视图的背景颜色从 .clear 更改为一些灰色来使其工作。
我很困惑它是否有效,因为透明视图(颜色:.clear)应该参与事件响应者链。但话虽如此,从容器视图到 tableView,一切都设置为 .clear。所以显示的颜色是 viewController 的背景颜色。
不过,我不确定这是我的错误设置还是 UIKit 中的错误。我猜是在我身上?无论如何......我把这个留在这里,以防其他人遇到这个问题。
推荐阅读
- google-cloud-platform - 如何使用 gcloud 创建云启动器产品集群
- r - Quantstrat 交易策略初始股权考虑
- javascript - Can't make multiple charts to work with highcharts
- javascript - 谷歌地理图表内的前缀
- ios - 如何在 UITableViewController Static Cell iOS 中显示下拉菜单?
- sql - 如何编写用于以下的 sql 选择查询
- linux - 在 timeout 内给出命令的错误
- mysql - 在 Laravel 中从 db 获取数据时出错
- python - 使用python中的引用字典更新二级字典数组对象
- python - 使用海龟和递归函数的谢尔宾斯基三角形