【发布时间】:2015-01-03 07:41:23
【问题描述】:
我有一个 UITableView,其中一些(不是全部)UITableViewCells 包含自己的 UITableView。
我发现的默认行为是,当尝试单击滚动 (UIScrollViewPanGestureRecognizer) 最外面的表格时,滚动工作得很好,但只有当点击开始于不包含嵌套 UITableView 的单元格时。当单元格包含嵌套的 UITableView 时,将调用该内部表的 PanGestureRecognizer。这种行为是可以理解和预期的。
我的愿望是禁用内部表格上的所有滚动,并且有任何从它们开始的平移手势,而不是触发/调用外部表格上的滚动。
我已经研究并尝试了几种解决方案,但都没有成功。
禁用嵌套单元格中的所有交互不是一个选项,因为我需要能够点击选择或滑动删除嵌套表中的单元格。
我能够找到并删除内表的 UIScrollViewPanGestureRecognizer。这成功地禁用了内表的滚动。但是,我无法调用外部表的 UIScrollViewPangestureRecognizer。相反,我的外部表格基本上有“死角”(具有嵌套表格的单元格),无法在外部表格上滚动。
我所读到的关于视图层次结构和命中测试的所有内容都表明,上述解决方案应该可以简单地工作:UITouch 被包装在 UIEvent 中,因此会查询视图层次结构中所有可能的接收者。奇怪的是,从调试器来看,我的视图层次结构似乎在内部 UITableView 处被切断。也就是说,对于有问题的 UITableViewCell,它的 superview 链只导致 nil,而不是最外层表。然而,使用 Reveal 应用程序 (www.revealapp.com),我已经确认我的视图层次结构确实是连接的(这是有道理的,否则内部表格将不会呈现)。
最后,我尝试了这段代码:
[innerTable.panGestureRecognizer requireGestureRecognizerToFail:outerTable.panGestureRecognizer];
根据我的参考,这应该完全符合我在这里的要求——除非外部表延迟,否则内部表不会捕获平移手势。但是这段代码没有任何作用。
非常感谢您提供的任何帮助 - 这已经是一个令人困惑的 UI 谜团很多天了!
【问题讨论】:
-
什么时候将用户能够滚动内部表格视图?还是已经计算出完全可见?
-
计算为完全可见。
标签: ios uitableview uiscrollview uigesturerecognizer uipangesturerecognizer