0

问候 StackOverflow。

我有一个场景,其中我有一个 UITableView 具有动态数量的部分。这意味着该表可能有 1 个部分、5 个部分、100 个部分,等等。

问题是,每个部分都以不同的方式处理和显示

例如,第 0 节包含紫色单元格列表,而第 1 节包含黄色单元格。
因此,我需要能够计算每个部分类型最终将作为.

我的意思是,假设部分的优先级如下:
洋红色,黄色,绿色,白色
然后当所有部分被填充时,它们将按顺序排列,M = 0,Y = 1,G = 2,W =3。
但是,当缺少一个部分时,比如 Yellow,结果如下:
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] 这很可能满足你的所有需要​​。

4

1 回答 1

1

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

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

于 2012-08-28T02:00:56.507 回答