如何在swift中将3级数据显示在一个tableview中?
我的json数据是一个对象数组,其中对象数据的内部数组在那里直到3级。 我把第一级json数据和第二级数据放在cell中。 现在我怎么能显示在单个tableview中的第三级数据?
你可以看到这里的屏幕截图
直到现在只有两个级别完成。 我需要像第二级一样显示第三个标签
我的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": "" },
你可以使用UITableViewDelegate
的方法tableView(_:indentationLevelForRowAt:)
缩进你的第三层。 只需在委托中实现该方法,并返回例如20
表示您的第三级别的行,其他行则返回0
。
更新 :现在我想了解你的问题。 您将不得不平坦化您的层次结构,因为表视图本身只支持2个级别。 第一级可以通过tableview部分来实现(就像你已经做的那样)。 第二和第三级可以作为行来实现,所以你必须将这些级别合并为一个:
Pizzas Pizzas Margaritha Margaritha 9InchThin 9InchThin 12InchThin --> 12InchThin BBQBasic BBQBasic 9InchThin 9InchThin 12InchThin 12InchThin
就Swift实现而言,我build议使用Enum来表示扁平行:
enum ListItem { case TitleItem(TitleData) // represents 2nd-level items case DetailItem(DetailData) // represents 3rd-level items }
( TitleData
是你的模型对象包含例如“Margharita”/“奶酪和西红柿”, DetailData
是包含例如“9英寸薄&脆皮Margharita”/“£3,40”的模型。)
在viewDidLoad:
为表格中的每个部分创build一个ListItem
数组:为每个标题添加TitleItem
,然后为所有嵌套细节添加TitleItem
。 从你的tableView:numberOfRowsInSection:
返回该部分列表项的数量。 最后在tableView:cellForRowAtIndexPath:
根据列表项的types返回一个单元格:
let listItem = listItemForIndexPath(indexPath) switch listItem { case .TitleItem(let titleData): return titleCellWithData(titleData) case .DetailData(let detailData): return detailCellWithData(detailData) }
其中titleCellWithData
和detailCellWithData
当然应该从表视图出列可重用的单元格。