UITableView部分使用不同的单元格颜色

时间:2013-02-01 13:02:03

标签: iphone ios xcode uitableview

我是iPhone开发的新手。我有一个包含多个部分的表视图。我正在改变像这样的细胞颜色,它工作正常。

if ([indexpath row]%2)
{
    trackCell.contentView.backgroundColor = [UIColor clearColor];
}
else
{
    trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
}

但现在,一个部分的最后一个单元格与下一部分中的第一个单元格颜色相同。我怎么解决这个问题?

4 个答案:

答案 0 :(得分:2)

这很脏,但您可以在当前单元格之前计算所有单元格,然后使用该计数来计算出所需的颜色。这是未经测试的,但类似下面的内容应该这样做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int cellCount = 0;
    for (int i=0;i<indexPath.section-1;i++)
    {
        cellCount+=[self numberOfRowsInSection:i]
    }

   cellCount+=indexPath.row;

   if(cellCount%2==0)
   {
    //set one color
   }
   else
   {
    //set other color 
   }
   // blah
}

答案 1 :(得分:1)

问题是如果单元格在第1部分(或2,3,...) 并且前一部分具有奇数个单元格,它以与前一个单元格的最后一个单元格相同的颜色结束。

所以,你需要检查上一节的单元格数量,如果这个数字是奇数,则反转你的“if”语句,如果它是偶数则保持原样

修改

int toBeAdded = 0;
if (indexPath.section>0) {
    toBeAdded = ([self tableView:tableView numberOfRowsInSection:(indexPath.section -1)]) %2 ;
}

if (([indexpath row]+toBeAdded)%2) {
    trackCell.contentView.backgroundColor = [UIColor clearColor];
} else {
    trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
}

编辑2:

看到“Will Jenkins”......他是对的......你需要看到之前的所有部分,而不仅仅是前一部分......

他计算一个部分中所有细胞的方式并不像我的那么好和快,但他的答案是正确的,给他+1 ......无论如何,最好的方法是结合他的循环和我的呼叫to tableView:tableView numberOfRowsInSection:

答案 2 :(得分:0)

Regaridng部分改变颜色,需要编写自己的逻辑,

需要使用Static int值而不考虑部分,并且已经使用代码替换 indexpath.row与您的值。即。

Static int Index;

  if ( Index % 2)
   {
     trackCell.contentView.backgroundColor = [UIColor clearColor];
   } else  {
trackCell.contentView.backgroundColor = [UIColor colorWithRed:212/255.0 green:212/255.0 blue:212/255.0 alpha:0.1];
   }
 Index++;

答案 3 :(得分:0)

这是因为每个部分的行数 ...

假设您尝试将 RED颜色提供给奇数行,将绿色提供给偶数行并且您在第一部分中有3行,然后最后一个单元格将具有RED颜色,第二部分的第一单元格也具有RED颜色。

所以你只需要检查上一节中的行数。如果偶数,那么您应保持颜色顺序,否则简单更改颜色顺序