如何最好地处理UITableView子部分?

时间:2014-01-09 23:21:28

标签: ios json uitableview

我正在使用Locu的数据,如下所示:

{
  "menus": [
    {
      "menu_name": "Dinner",
      "sections": [
        {
          "section_name": "Starters",
          "subsections": [
            {
              "subsection_name": "",
              "contents": [
                {
                  "price": "6.00",
                  "type": "ITEM",
                  "name": "Soup of the Day"
                },

等...

当有多个部分(它们直接映射到UITableView部分)并且每个部分都有一个包含项目的子部分时,使用此结构实现UITableView没有问题。

我遇到的困难是处理相反的情况 - 只有一个部分,但有多个子部分。

实例!

menu_name: Dinner
    section0: Starters
        subsection0: ""
            (items)
    section1: Salads
        subsection0: ""
            (items)
    section2: Entrees
        subsection0: ""
            (items)

VS

menu_name: Beer & Wine
    section0: Beers
        subsection0: On Tap
            (items)
        subsection1: Bottled
            (items)

在这些示例中,Dinner菜单可以轻松映射到UITableView部分,而numberOfSectionsInTableView:可以轻松计算所有部分。但是一旦你抛出啤酒&葡萄酒菜单混合,假设所有菜单都在一个长视图中,你如何计算numberOfSectionsInTableView的部分:?你如何计算numberOfRowsInSection的行数?另外,我认为UITableView甚至不能处理小节,所以你在那里做什么?只显示一个没有行的部分,然后是另一部分?

3 个答案:

答案 0 :(得分:1)

你是对的。实际上不支持小节。你需要有点创意才能让它以你想要的方式运作。

基本上你必须'模仿小节'。它们只是像其他行一样的行,但可能使它们的细胞看起来略微不同,阴影比其他细胞或那种东西更暗。

最终需要更多的维护,因为你必须跟踪这些子部分,因为它们只是沿着其他行的常规行,同时试图让它们看起来更像子部分。

答案 1 :(得分:1)

如果您正在寻找一个简单的解决方案,您可以为UITableViewCell设置indentationLevel(以及可能的indentationWidth)属性,具体取决于它们在数据层次结构中的位置。如果您需要更多,则必须进一步自定义UITableViewCells的外观,如valheru所述。

答案 2 :(得分:0)

如果您只是使章节和子章节相同,那么您可以通过创建字典来获取您的数量。

在字典中创建部分(此时包括子部分),键。

然后使部分中的项目成为字符串数组。

对于部分的数量,获取字典键的数组,然后使用它的计数。

对于节中的行数,使用objectAtIndex(节)获取节名称

然后使用该名称,创建AnyObject数组,在字典上使用objectForKey,其中objectForKey是刚刚创建的sectionName。

您可以在单元格中使用相同的技术来获取数据。

相关问题