UITableView更改特定单元格的背景颜色

时间:2014-01-25 16:34:39

标签: ios objective-c uitableview

我想更改UITableView单元格的颜色。我有这个代码,但它不起作用。有人可以向我解释为什么以及我应该改变什么?

[_myTableView cellForRowAtIndexPath : [NSIndexPath indexPathForItem:myIndexAsInt inSection:0]].contentView.backgroundColor = [UIColor greenColor];

4 个答案:

答案 0 :(得分:1)

要更改标准UITableViewCell的颜色,您需要通过覆盖UITableViewDelegate方法tableView:willDispayCell:forRowAtIndexPath:来完成此操作:

- (void)tableView:(UITableView *)tableView willDispayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.contentView.backgroundColor = color;
}

如果您的单元格包含自定义内容,您可能希望实现略有不同。

答案 1 :(得分:0)

设置第3个单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

   if (cell == nil)
   {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }
   if (indexPath.row == 2)
   {
      cell.contentView.backgroundColor = [UIColor redColor];
   }
   return cell;
}

答案 2 :(得分:0)

代码行本身是合法的。

有些事情无法从我这边验证。请在该行上设置一个断点并运行它。

0)通过在那里放置一个断点,并看到系统停在那里,你实际上检查该行是否已执行。

1)如果步骤0没问题,请检查您是否确实有一个表视图实例(它必须不是nil,如果您使用的是nib,则忘记创建IBoutlet)。

2)确保tableView具有适当的委托和数据源。 (通常是ViewController,你提到的那些东西都被处理了......)

3)检查您是否为myIndexAsInt参数传递了正确的类型和正确的值。它应该是NSInteger类型,应该等于2.

4)如果以上所有3都没问题,也许你是从错误的地方打电话。

让我们知道它是怎么回事。

答案 3 :(得分:0)

您可以使用变量来保存索引位置。因此,在调用 didSelectRowAtIndexPath 委托后,只需在该变量中设置索引位置并重新加载表。使用 cellForRowAtIndexPath 数据源方法中的条件检查索引位置,现在设置该特定单元格的背景颜色。

.h 文件中的

NSInteger indexPos;
didSelectRowAtIndexPath 委托中的

indexPos = indexPath.row;
cellForRowAtIndexPath

中的

if (indexPath.row == indexPos) {
    cell.backgroundColor = [UIColor colorWithRed:255/255.0f green:255/255.0f blue:255/255.0f alpha:1.0f];
} else {
    cell.backgroundColor = [UIColor colorWithRed:0/255.0f green:0/255.0f blue:0/255.0f alpha:1.0f];
}