用于计算动态UITableView节的公式



问候语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

这里有一个模式。是的,这是一个非常复杂的模式。

我想问大家的问题是,是否可以将此模式简单地转换为一个小的、可能是递归的函数,我将其按部分的优先级传递,它将计算目标索引

如果您可以创建一种更简单的方法来实现我的需求
对于后者,仅仅将显示的行数设置为0是不够的,因为该部分的填充仍然存在。

我提供了一个助手函数——正如上面的copypasta代码中所示,用于检查是否应该显示一个部分:[self shouldDisplaySection:n]这很可能会提供你所需要的一切。

听起来你实际上想使用有序字典,只需将你想要的值推到它上,然后按照数字索引作为部分顺序依次读取。

在Obj-C中实现的有序字典的一个相当好的例子是http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

最新更新