Ios 如何创建树型UITableView结构?
我有一个NSMutableArray的NSDictionary,如下所示Ios 如何创建树型UITableView结构?,ios,objective-c,tree,nsmutablearray,nsdictionary,Ios,Objective C,Tree,Nsmutablearray,Nsdictionary,我有一个NSMutableArray的NSDictionary,如下所示 <Blank BlankName="V6" Type="Line" CurrentType="Crypt"/> <Blank BlankName="T3" Type="Ion" CurrentType="Crypt"/> <Blank BlankName="HU" Type="Sia" CurrentType="Crypt"/> <Blank BlankName="HF" Type
<Blank BlankName="V6" Type="Line" CurrentType="Crypt"/>
<Blank BlankName="T3" Type="Ion" CurrentType="Crypt"/>
<Blank BlankName="HU" Type="Sia" CurrentType="Crypt"/>
<Blank BlankName="HF" Type="Ion" CurrentType="Crypt"/>
<Blank BlankName="HU5" Type="Sia" CurrentType="Crypt"/>
<Blank BlankName="HU6" Type="Sia" CurrentType="Less"/>
<Blank BlankName="V6" Type="Line" CurrentType="Less"/>
<Blank BlankName="V66" Type="Line" CurrentType="Less"/>
因此,以我这里的xml为例,UITableView看起来是这样的
Crypt
- Ion
- T3
- HF
- Line
- V6
- Sia
- HU
- HU5
Less
- Line
- V6
- V66
- Sia
- HU6
我没有任何我一直在研究的示例代码,因为我真的不知道从哪里开始,例如,是否有适合存储此类信息的特定结构。我没有研究过分类,因为我不知道如何存储它
问了这个问题后,我仍在阅读和调查。最终,在
UITableView
中表示项目的最简单方法(我认为)是使用平面数组(如果有多个部分,则使用平面数组)
您需要做的是根据您所在的树的级别增加缩进级别,但是您还需要正确的顺序
有这样一个对象可能会有所帮助:
@interface MyObject
@property NSInteger level;
@property id object;
@end
[ <Dictionary containing Header 1 title, indentation 0>,
(Dictionary containing Sub-Header 1 title, indentation 1),
-Dictionary containing Sub-Header-info 1 title, indentation 2-,
-Dictionary containing Sub-Header-info 1 title, indentation 2-,
.....
(Dictionary containing Sub-Header 2 title, indentation 1),
.....
<Dictionary containing Header 2 title, indentation 0>,
.....
and so on.
]
现在,遍历XML。将此对象的level
属性设置为对象在XML中的正确深度,并将object
作为指向原始对象的指针
在执行此操作时,将所有这些对象放入一个数组中,并确保顺序正确
构建完数组后,现在只需将其与表视图的数据源一起使用即可
对于numberOfRows
,返回数组的计数
创建表视图单元格时,将缩进级别设置为容器对象中设置的
级别属性。要创建平面数组,请更改解析代码以创建如下数组:
@interface MyObject
@property NSInteger level;
@property id object;
@end
[ <Dictionary containing Header 1 title, indentation 0>,
(Dictionary containing Sub-Header 1 title, indentation 1),
-Dictionary containing Sub-Header-info 1 title, indentation 2-,
-Dictionary containing Sub-Header-info 1 title, indentation 2-,
.....
(Dictionary containing Sub-Header 2 title, indentation 1),
.....
<Dictionary containing Header 2 title, indentation 0>,
.....
and so on.
]
[,,
(包含子标题1、缩进1的词典),
-包含子标题信息1标题的词典,缩进2-,
-包含子标题信息1标题的词典,缩进2-,
.....
(包含副标题2、缩进1的词典),
.....
,
.....
等等
]
您可以创建自己的自定义对象类来保存缩进、标题和其他内容的值,而不是字典。将更易于使用:)
干杯:)只需谷歌的可折叠表结构“.你会找到很多的。但一定要记住理解它们背后的逻辑和实现。简单的复制没有乐趣:)太棒了,我会看看的。是的,我喜欢学习,我从来没有看到过解决方案,所以不知道从哪里开始。还有一件事是我不想让它变得容易,我只想知道如何创建我所追求的结构。。标题、子标题、信息。。希望这能帮我解决这个问题。我确实有一个解决办法。但给你太简单了:D:P..使用字典来维护页眉+副标题+。。对于键,单击一个单元格,只需通过从子标题数组中获取数据,在单元格数据源数组中插入新对象,并重新加载带有新插入单元格缩进的表:D..沿以下几行的内容;)我在上面编辑了我的答案,听起来很酷,谢谢你提供的信息。。但我更感兴趣的是理解如何将标题、子标题和信息独立地排序到一个平面数组中,然后在tableview中使用。。无论如何,我都会研究折叠表结构,因为其中可能有一些信息或帮助。再次感谢您的回复。。我明白你的意思,但我脑子里的问题是在对三个不同层次进行排序时出现的。标题、子标题和信息都需要独立排序。。。我不知道如何在平面数组中实现这一点。除了级别
和对象
,您还可以添加对父级
的引用。具有相同父对象的每个对象必须位于父对象
和下一个级别
为的对象之间。。我有点玩弄这个主意。。。然而,有一件事我搞不清楚,那就是按字母顺序排序。如果可能的话,你知道吗?谢谢你的回答…在客户端按字母顺序排序会很棘手,因为我假设你想分别对标题、子标题和信息项进行排序。如果你在服务器端对你正在维护的数据库进行排序会更好。是的,这正是我所希望的。。。如果我做不到,我就照原样做。。谢谢你的帮助。