我是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];
}
但现在,一个部分的最后一个单元格与下一部分中的第一个单元格颜色相同。我怎么解决这个问题?
答案 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颜色。
所以你只需要检查上一节中的行数。如果偶数,那么您应保持颜色顺序,否则简单更改颜色顺序。