更改自定义tableViewCell的背景颜色

时间:2015-04-20 09:59:27

标签: ios objective-c uitableview

我想更改单元格的背景颜色

我看到其他问题,但他们不符合我的情况

我想做一个通知tableView

例如,如果用户已读取单元格,则单元格的背景颜色将更改为白色

如果没有,颜色为黄色

开始时

我在

中设置了颜色
-(void)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

   if(read[[indexPath row]])
     [cell.backView setBckgroundColor:[UIColor whiteColor];
   else
     [cell.backView setBckgroundColor:[UIColor redColor];
}

它有效,然后我想改变颜色

tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath{
   read[[indexPath row]] = yes;
   [cell.backView setBckgroundColor:[UIColor whiteColor];
   cell.name.text = @"test";
}

它也有效

但如果我选择其他单元格,则会变为原始颜色

似乎它只能同时改变一个细胞的颜色

无论我使用

cell.backgroundColor
cell.contentView.backgroundColor
cell.backView 

它得到了相同的结果,任何人都可以帮助我


编辑4/20 20:13

我设置了读入

tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

抱歉误导,我更新了代码

在我选择其他单元格后,我不会调用[tableView reload]

所以我不认为这是原因

顺便说一下,所有东西(例如标签)都可以改变,但背景颜色

如果我选择单元格,它会通过导航跳转到其他屏幕


结论第一

tableView: cellForRowAtIndexPath: is well

tableView: willDisplayCell: is well too

它们都可以改变背景颜色

但是当需要绘制新单元格或重新加载tableView

时它们会执行

我仍然混淆为什么我可以在didselectionRowAtIndexPath中更改标签 但我无法改变颜色

6 个答案:

答案 0 :(得分:2)

使用tableView: willDisplayCell:方法

更改颜色
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (...){ //do your stuff.
        [cell.backView setBckgroundColor:[UIColor redColor];
    } else {
        [cell.backView setBckgroundColor:[UIColor whiteColor];
    }
}

答案 1 :(得分:0)

我想你想设置你的变量"阅读"

中的“是”

tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath

我想你只使用一个变量来记录状态只是因为你简化了在这里发布的状态,否则你可能想用单独的变量记录每个单元格的状态。

答案 2 :(得分:0)

您需要在单元格的索引处更新对象的“read”属性。

tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath {
   [cell.backView setBckgroundColor:[UIColor whiteColor];
   currentObjectForThisCell.read = YES;
}

然后:

-(void)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
   if(currentObjectForThisCell.read)
     [cell.backView setBckgroundColor:[UIColor whiteColor];
   else
     [cell.backView setBckgroundColor:[UIColor redColor];
}

答案 3 :(得分:0)

在您编辑的代码中,当您选择单元格时,将读取标志设置为“是”并将颜色更改为白色,这很好,但在cellForRowAtIndexPath:中,您将设置的单元格设置为读取标记为“是”为红色,和NO为白色,这与didSelectRowAtIndexPath:方法中的行为相反。

答案 4 :(得分:0)

尝试在didSelectRowAtIndexPath

中获取Selected单元格

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

//设置seleted索引的读取属性

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.backgroundColor = [UIColor redColor];

}

答案 5 :(得分:0)

您是否为tableView调用了reloadData 在“didSelectRowAtIndexPath”中设置read属性并重新加载tableView