我正在使用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甚至不能处理小节,所以你在那里做什么?只显示一个没有行的部分,然后是另一部分?
答案 0 :(得分:1)
你是对的。实际上不支持小节。你需要有点创意才能让它以你想要的方式运作。
基本上你必须'模仿小节'。它们只是像其他行一样的行,但可能使它们的细胞看起来略微不同,阴影比其他细胞或那种东西更暗。
最终需要更多的维护,因为你必须跟踪这些子部分,因为它们只是沿着其他行的常规行,同时试图让它们看起来更像子部分。
答案 1 :(得分:1)
如果您正在寻找一个简单的解决方案,您可以为UITableViewCell设置indentationLevel
(以及可能的indentationWidth
)属性,具体取决于它们在数据层次结构中的位置。如果您需要更多,则必须进一步自定义UITableViewCells的外观,如valheru所述。
答案 2 :(得分:0)
如果您只是使章节和子章节相同,那么您可以通过创建字典来获取您的数量。
在字典中创建部分(此时包括子部分),键。
然后使部分中的项目成为字符串数组。
对于部分的数量,获取字典键的数组,然后使用它的计数。
对于节中的行数,使用objectAtIndex(节)获取节名称
然后使用该名称,创建AnyObject数组,在字典上使用objectForKey,其中objectForKey是刚刚创建的sectionName。
您可以在单元格中使用相同的技术来获取数据。