在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动
Posted
技术标签:
【中文标题】在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动【英文标题】:Scrolling in UITableView embedded in UITableviewCell (ios7) 【发布时间】:2014-04-04 10:02:55 【问题描述】:我已将 UITableView
添加为 UITableviewCell
的子视图。
在 ios 6 中,当我滚动内部 tableView
并到达它的末尾时,主表视图变为滚动。
在 iOS 7 中,它不再工作了。如果我在内部表格视图中滚动,它不会将此滚动事件传递给父 tableView。
有谁知道如何简单地修复它,而无需手动将事件从内部 tableview 传输到父级?
附加信息: 我找到了problem 的可能原因。但是如何解决这个问题。
【问题讨论】:
你为什么要这样做?不建议在 TableViewCell 中添加 TableView。 我需要显示不适合单元格大小的内容。 你试过用 UICollectionView 代替 UITableView 吗? 我必须支持 iOS 5。:) @FaisalAli,为什么不推荐?你有没有这样说的 Apple 文档? 【参考方案1】:所以,我找到了解决办法。
根据@FaisalAli 的提示,我实现了委托方法:
- (BOOL) gestureRecognizer: (UIGestureRecognizer*)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer*)otherGestureRecognizer
if ([gestureRecognizer isKindOfClass: [UIPanGestureRecognizer class]])
if ([((UIPanGestureRecognizer*)gestureRecognizer) velocityInView: self].y > 0)
// Up
if (self.contentOffset.y <= 0)
self.bounces = NO;
return YES;
else
// Down
if (self.contentOffset.y + self.height >= self.contentSize.height)
self.bounces = NO;
return YES;
self.bounces = YES;
return NO;
它有帮助。
【讨论】:
如果有人没有得到它:您嵌入的 tableview 实例必须实现 shouldRecognizeSimultaneouslyWithGestureRecognizer。你可以从上面复制代码来计算返回值,或者你可以直接返回 !(self.contentOffset.y > 0)。希望对任何人都有帮助。【参考方案2】:我认为这对于用户的易用性而言不是明智的解决方案。你应该使用Master-Detail Strategy。
将UINavigationController
设置为rootViewController,然后推送你的MasterTableViewController
,在选择每个单元格时,你可以推送新的TableViewController
,其中包含所选单元格项目的详细数据。
编辑
如果你真的想在 TableViewCell 中添加 TableView,请关注 link 1 和 link 2。
【讨论】:
即使您对 MVC 一致性的看法是绝对正确的,嵌套的UITableView
s 也是一种可接受的设计模式。它确实增加了编码器的内存开销和性能优化,但如果处理得当,会产生一些非常好的结果。
在 TableViewCell 中处理 TableView 的委托和数据源都不是小菜一碟... :) 我认为使用我的策略会降低复杂性。
@abagmut 我已根据您的要求编辑了我的答案。如果有帮助,请查看它。
您对复杂性的看法是正确的,但一个好的应用程序是为用户提供最佳用户体验的应用程序,无论编码人员的制作难度如何。
@FaisalAli 我已经查看了您提供的链接,但根据我的问题没有发现任何有用的东西(写这篇文章时没有 ios 7)。明确一点,在 ios6 上一切正常,问题只出现在 ios7 上。以上是关于在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动
UITableviewCell textLabel在ios7中不可见
iOS 8 中的 UITableViewCell 约束在 iOS7 中不起作用