2016-07-19 32 views
1

我的json數據是一個對象數組,其中的對象數據的內部數組在那裏直到3級。我將第一級json數據分爲第二級數據和第二級數據。現在我怎樣才能在單個tableview中顯示第三層數據?如何在swift中將3級數據顯示到單個tableview中?

,你可以在這裏看到

enter image description here

屏幕截圖截至目前只有兩個在這裏完成的水平。我需要與第二級一起顯示這樣的第三標籤..

enter image description here

我的JSON數據..

[ 
{ 
"id": "244", 
"name": "PIZZAS", 
"image": "", 
"coupon": "1", 
"icon": "", 
"order": "1", 
"aname": "", 
"options": "2", 
"subcategory": [ 
    { 
    "id": "515", 
    "name": "MARGARITA", 
    "description": "Cheese and Tomato", 
    "image": "", 
    "icon": "", 
    "coupon": "1", 
    "order": "1", 
    "aname": "", 
    "options": "2", 
    "item": [ 
     { 
     "id": "1749", 
     "name": "9 Inch Thin & Crispy Margarita", 
     "description": "", 
     "price": "3.40", 
     "coupon": "1", 
     "image": "", 
     "options": "2", 
     "order": "1", 
     "addon": "495", 
     "aname": "", 
     "icon": "" 
     }, 
+0

您可以創建一個'UITableViewCell'子類並以編程方式爲其添加視圖(每個樣式的瑪格麗塔披薩的一個視圖),使用Autolayout垂直放置它們。假設您的表格視圖設置爲動態高度,您的視圖列表將垂直展開該單元格以獲得期望的結果。 – paulvs

回答

0

你可以使用UITableViewDelegate S分析tableView(_:indentationLevelForRowAt:)縮進您的第3級。只需在委託中實施該方法並返回代表您的第3級的行爲20,所有其他行的0

UPDATE:現在我想明白你的問題。您將不得不平坦化您的層次結構,因爲表視圖本身只支持2個級別。第一級可以通過tableview部分來實現(就像你已經做的那樣)。第二和第三層面則可以實現爲行,所以你要這些水平摺疊成一個:

Pizzas     Pizzas 
    Margaritha    Margaritha 
    9InchThin    9InchThin 
    12InchThin -->  12InchThin 
    BBQBasic    BBQBasic 
    9InchThin    9InchThin 
    12InchThin   12InchThin 

在斯威夫特實施方面,我建議使用一個枚舉爲代表的扁平行:

enum ListItem { 
    case TitleItem(TitleData) // represents 2nd-level items 
    case DetailItem(DetailData) // represents 3rd-level items 
} 

TitleData爲型號對象containig例如 「Margharita」/ 「奶酪和番茄」,DetailData是含有例如 「9英寸厚&脆皮Margharita」/ 「£3,40」 的型號。)

viewDidLoad:爲表中的每個部分創建一個ListItem的數組:爲每個標題添加一個TitleItem,然後爲所有嵌套細節添加DetailItem。從您的tableView:numberOfRowsInSection:返回該部分中列表項的數量。終於在tableView:cellForRowAtIndexPath:取決於列表項的類型返回電池:

let listItem = listItemForIndexPath(indexPath) 
switch listItem { 
case .TitleItem(let titleData): return titleCellWithData(titleData) 
case .DetailData(let detailData): return detailCellWithData(detailData) 
} 

...其中當然titleCellWithDatadetailCellWithData應該從表視圖出隊可重複使用的細胞。

+0

它只在我定義的每一行前面添加一些空間,作爲返回 –

+0

是的,這就是它應該做的事情。對不起,如果這不適合你,我可能沒有完全理解你的要求。 –

+0

請參閱上面的屏幕截圖。我需要添加第三個數據,如9英寸,12英寸......。我應該採取這些。 bcoz我已經把section和sectionof的行數了。 –

相關問題