2014-01-09 45 views
0

我使用的是從Locu看起來像這樣的數據:如何最好地處理UITableView子部分?

{ 
    "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) 

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

在這些例子中,晚餐的菜單將有一個簡單的映射UITableView的部分,並且numberOfSectionsInTableView:是所有章節的一個簡單的計數。但是,一旦您將Wine菜單放入混合菜單中,假設所有菜單都位於一個長視圖中,那麼您如何計算numberOfSectionsInTableView的部分:?你如何計算numberOfRowsInSection的行數?此外,我不認爲UITableView甚至可以處理小節,所以你在那裏做什麼?只顯示沒有行的部分,然後是另一部分?

回答

1

你是對的。小節不是真的支持。你必須有一點創意才能讓它按照你想要的方式工作。

基本上,你必須「模仿小節」。他們只是像行的其餘行一樣,但可能會使他們的細胞看起來稍微不同,比其他細胞或那種事情陰影更深。

它最終成爲更多維護,但因爲你必須跟蹤這些小節作爲只是普通的行沿着其他行,而試圖讓他們看起來更像子節。

1

如果您正在尋找一個簡單的解決方案,您可以爲您的UITableViewCell設置indentationLevel(可能爲indentationWidth)屬性,具體取決於它們在數據層次結構中的位置。如果你需要比這更多,你將不得不進一步定製你的UITableViewCells的外觀作爲valheru提到。

0

如果你只是讓章節和小節相同,那麼你可以通過創建一個字典來獲得你的數量。

在字典中創建部分(此時包括子部分),鍵。

然後在部分中的項目中創建一個字符串數組。

對於節的數量,獲取字典的鍵數組,然後使用它的數量。

對於行中的段的數量,通過使用objectAtIndex(節)

然後,使用該名稱,創建和AnyObject的陣列獲得的節名,利用objectForKey在字典,其中objectForKey是sectionName那是剛剛創建的。

您可以在單元格中使用相同的技術來獲取其數據。

相關問題