在 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 一致性的看法是绝对正确的,嵌套的 UITableViews 也是一种可接受的设计模式。它确实增加了编码器的内存开销和性能优化,但如果处理得当,会产生一些非常好的结果。 在 TableViewCell 中处理 TableView 的委托和数据源都不是小菜一碟... :) 我认为使用我的策略会降低复杂性。 @abagmut 我已根据您的要求编辑了我的答案。如果有帮助,请查看它。 您对复杂性的看法是正确的,但一个好的应用程序是为用户提供最佳用户体验的应用程序,无论编码人员的制作难度如何。 @FaisalAli 我已经查看了您提供的链接,但根据我的问题没有发现任何有用的东西(写这篇文章时没有 ios 7)。明确一点,在 ios6 上一切正常,问题只出现在 ios7 上。

以上是关于在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableviewCell (ios7) 中嵌入的 UITableView 中滚动

UITableviewCell textLabel在ios7中不可见

iOS 8 中的 UITableViewCell 约束在 iOS7 中不起作用

UITableViewCell 中的 UIButton 在 iOS7 中不起作用

ios7中的UITableViewCell现在左右有间隙

UITableViewCell错误ios7