在UIScrollView中滚动UITableView

12

我有一个 UITableView,它是一个 UIView 的子视图,然后这个 UIView 是一个 UIScrollView 的子视图。如何检测应该滚动 UITableView 的触摸事件?

UITableView 可以很好地获取项目选择事件(选择/点击表格中的单元格),但必须长按单元格才能触发。但是我无法让 UITableView 滚动,它总是 UIScrollView 响应拖动手势。

非常感谢任何帮助。提前致谢!

编辑: 已解决,尽管我问错了问题。正如 Roman K 所指出的那样,它默认可以正常工作。我认为问题与 UITableView 的一部分超出了 UIScrollView 的边界有关(UITableView 超过了 UIScrollView 的底部边界)。将其正确放置在 UIScrollView 内部修复了此问题。


我想建议这个答案:https://dev59.com/03A75IYBdhLWcg3wMmCo#32486714 - Омар Лахам
1个回答

17
请确保 UIScrollView 的属性 delaysContentTouchescanCancelContentTouches 被适当地设置。它们控制 UIScrollView 实例将触摸信息传递给其子视图的方式。默认情况下,delaysContentTouches 被设置为 YES。同时,请确保如果您扩展了 UIScrollView,则touchesShouldBegin:withEvent:inContentView:方法允许在子视图中进行触摸操作。
否则,在您的场景中,UITableView 的滚动应该可以默认工作。如果您创建一个仅包含如上所述视图层次结构的测试项目,您会发现它是这种情况。因此,请比较两者并查看哪些差异影响了滚动。

1
我相信我已经正确设置了delaysContentTouches(设置为YES)和canCancelContentTouches(设置为NO)。我能够很好地在UITableView中获取点击,但无法进行轻扫和滑动。 - Altealice
谢谢。这已经让我痛苦了很久。 - thedp
3
我认为这个逻辑在iOS8中有问题。看起来UIScrollView会拦截垂直滚动手势而不是忽略它们。我在Stack Overflow上发了一个新的问题 - https://dev59.com/ZYLba4cB1Zd3GeqPlOoh - sha
@sha +1 我们正在遇到完全相同的问题! - mikemike396

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接