问候StackOverflow。
我有一个场景,其中我有一个带有动态部分的UITableView。 这意味着该表可能有1个部分,5个部分,100个部分,无论如何。
问题是,每个部分都以不同的方式处理和显示。
例如,第0节包含紫色单元格列表,第1节包含黄色单元格 因此,我需要能够计算每个部分类型最终的索引。我的意思是,假设这些部分的优先级如下:
洋红色,黄色,绿色,白色
然后当所有部分都填满时,它们将按顺序排列,M = 0,Y = 1,G = 2,W = 3。
但是,如果缺少一个部分,例如黄色,则结果如下:
M = 0,Y = -1,G = 1,W = 3
从而从列表中删除黄色,然后降低该部分的索引。
我已经使用三级语句构建了一些可以实现小部分大小的内容,但是当它手动定义每个部分类型时,它很快就会出现不成比例的情况:
// Here be some dragons.
// Each macro identifies a section
#define SectionMagenta (([self shouldDisplaySection:0])?0:-1) // 1 tertiary statements
#define SectionYellow (([self shouldDisplaySection:1])?((SectionMagenta==-1)?0:1):-1) // 3 tertiary statements
#define SectionGreen (([self shouldDisplaySection:2])?((SectionMagenta==-1)?((SectionYellow==-1)?0:1):((SectionYellow==-1)?1:2)):-1) // 11 tertiary statements
#define SectionWhite (([self shouldDisplaySection:3])?((SectionMagenta==-1)?((SectionYellow==-1)?((SectionGreen==-1)?0:1):((SectionGreen==-1)?1:2)):((SectionYellow==-1)?((SectionGreen==-1)?1:2):((SectionGreen==-1)?2:3))):-1) // 63 tertiary statements
这里有一种模式。一个非常复杂的,是的,但一个模式一点也不少。
我问你们所有人,就是你可以将这个模式简单地转换成一个小的,可能是递归函数,我传入该部分的优先级,并计算目的地索引。
OR
如果你能创造一种更简单的方法来实现我的需要
对于后者,仅仅将显示的行数设置为0是不够的,因为该部分的填充仍然存在。
我提供了一个辅助函数 - 如上面的copypasta代码所示 - 检查是否应显示一个部分:[self shouldDisplaySection:n]
这很可能提供你所需要的一切。
答案 0 :(得分:1)
听起来你真的想要使用一个有序字典,只需将你想要的值推到它上面,然后按顺序读取它们,并将数字索引作为你的部分顺序。
在Obj-C中实现的有序字典的一个相当好的例子是http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html