UITableView(可以添加或删除行):使偶数/奇数行具有不同的颜色?

时间:2012-11-05 05:12:25

标签: objective-c ios uitableview

我需要有偶数行的白色背景和奇数行的黑色背景,我在想:

方法1: 向单元格添加属性,指示单元格在显示时的位置,以便单元格可以切换颜色, 或者当我返回单元格时,我可以检查其位置并切换其颜色

  • 这应该只是工作
  • 需要在删除/添加行时重新加载整个表

方法2: 添加一个可伸缩的背景图像,具有重复的黑白条带,因为行高是固定的,然后以某种方式使其与表格滚动

  • 这听起来比方法1更聪明
  • 如果表格视图很大,则可能需要具有非常大的背景图像

有没有其他方法可以做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:4)

为什么不通过检查行是奇数还是偶数来设置背景。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
        {
    ........
    if (indexPath.row % 2 == 0)  //even
    {
    cell.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"Black"]];


    }
    else
    {
    cell.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"White"]];
    }

答案 1 :(得分:1)

到目前为止,所有其他答案似乎都忽略了与插入和删除行相关的问题。

我认为最简单的方法是在插入或删除行时,重新加载插入/删除点下方的所有可见行。没有必要处理可见范围以下的行。

假设您有100行,并且您正在查看20-30行。如你所说,偶数行是白色的。现在,如果在第35行插入/删除了一行,则无需执行任何操作,因为所有受影响的行都在屏幕外。如果在第25行插入/删除行,它将立即以正确的颜色显示。您现在需要重新加载第26-30行,以便使用适当的新颜色进行更新。如果在第15行插入/删除了一行,则需要重新加载第20-30行(所有可见行)。

如果需要,您可以进行一些优化。例如,如果添加了两行(比如15和16,则无需执行任何操作。

基本算法是在插入/删除后调用[tableView indexPathsForVisibleRows]。如果路径在插入/删除的索引路径之后,则重新加载每个路径。

答案 2 :(得分:0)

是的,你可以查看像indexpath%3 == 0这样的索引路径,并为方法1的单元格添加背景颜色,如cell.backroundcolor = [UIColor bluecolor];

为方法2添加细胞的背景图像     cell.bakgroundView = [UIImageview alloc]inithWitImage:[UIImage imagenamed@"cellBG.png"]];