UITableView 的大纲视图

Posted

技术标签:

【中文标题】UITableView 的大纲视图【英文标题】:Outline view from UITableView 【发布时间】:2010-05-18 13:52:07 【问题描述】:

我需要从 UITableView 中实现 1 级大纲视图。有孩子的单元格将有一个“+”符号,如果用户点击它,它下面的单元格应该向下滑动并且应该出现当前选定行的子单元格。单元格的滑动应该是可见的,如果用户点击已展开行的“-”按钮,子单元格应该滑回父单元格。

我试过谷歌搜索,但没有找到任何指针。

我应该如何开始,我应该继承 UITableView 吗?还是我应该实现自己的视图子类并处理那里的所有东西?

我觉得子类化 UITableView 会更容易,因为它会为我们处理所有的行选择,但我不知道该怎么做。

感谢和问候, 拉杰

【问题讨论】:

【参考方案1】:

您不能将字典作为数据源进行维护吗?保存字典数组的字典。以及带有两个键值对的内部字典:

    是扩展的 儿童信息。

通过检查 bool isExpanded 您将获得行数。并且您需要自定义单元格以添加按钮。它对你有用吗?

您可以通过将单元格内容稍微向右推来区分子单元格。

【讨论】:

好的,所以如果行展开,我会在tableView委托中引入更多的numberOfRows。使用这种方法如何实现需要展开的行下方的项目的滑动效果?我想,这里也发生了同样的问题,当表视图在行扩展时重新出现时,tableView 的重新出现。 好吧,我想必须扩展的行下方的行的滑动由表视图自动处理。我将不得不使用您和 Espuz 的混合解决方案。谢谢两者。 . .【参考方案2】:

你必须继承和 UITableViewCell

@interface OutlineCell : UITableViewCell

然后,在表格的 ViewController 中

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath 
    NSString* MyIdentifier = @"MyIdentifier";

    OutlineCell* cell = (OutlineCell*) [tableView dequeueReusableCellWithIdentifier: MyIdentifier];
    if (cell == nil) 
        cell = [[OutlineCell alloc] init];
    

    // Populate cell data

您可以通过 IB 定义界面,创建一个 Empty XIB 并拖动一个 UITableViewCell,并将您的自定义 OutlineCell 类作为文件所有者。然后添加按钮、标签等。

编辑:如果您想要一个单元格内的内部表格,请尝试使用相同的方法向您定义的 UITableViewCell 添加一个子视图,其中包含一个 UITableView。

【讨论】:

好方法,我怎么没想到呢?好吧,我有一个疑问,如何实现要扩展的行下方的行的滑动效果?有什么想法吗?根据这种方法,我相信我们必须为每一行提供行高,所以当一个表格行被扩展时,我们根据子项的数量提供新行。假设原来的行高是20,现在有5个孩子,新的行高是100。我猜表格只是重新出现新的行高,没有滑动效果,如何规避? 好吧,我不知道这是否有效,但是当点击 + 按钮时,要展开行并显示子行,您必须获取单元格的框架并更改大小UIView 动画块中的 .height 属性。当我使用信息面板而不是折叠和展开时,这对我有用。也许它也适用于这种情况^^ 注意:这是一个很好的方法,但我发现在重新加载表格数据和动画期间非常困难。新的 tableView 可以通过增加它的高度嵌入到单元格中,但是当动画开始播放时,作为子视图添加的 tableView 会在单元格后面,原因 - 我不知道!此外,我真的怀疑主 tableView 的 tableView 重新加载调用是否会重新加载内部 tableView。如果没有,我们可以在委托第一个tableView的-tableView:cellForRowAtIndexPath:时重新加载数据,但我怀疑重新加载的顺序。更好的方法 - 扁平化树结构。

以上是关于UITableView 的大纲视图的主要内容,如果未能解决你的问题,请参考以下文章

word中一共有几种视图方式,并且如何区分几种视图关系,如:页面视图、大纲视图等等

设计测试/调试的大纲视图

word怎么显示坐标目录?目录大纲(视图 --> 导航窗格)

每次单击大纲视图行时,如何更新行值和子项

Big Sur 大纲视图可扩展项目损坏

Xcode 10.2.1 界面构建器 - 无法在视图控制器(或文档大纲)上移动(拖动)UI 元素