更改单元格背景颜色会导致突出显示文本

时间:2013-09-17 22:13:41

标签: ios uitableview

我在表视图中创建单元格时运行了以下代码

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
    Medicine *medicine = [self.fetchedResultsController objectAtIndexPath:indexPath];
    if ([medicine isDue] == 1)
    {
        [cell setBackgroundColor:[self dueColour]];
        NSLog(@"Due");
    }
    else if([medicine active] == [NSNumber numberWithInt:0])
    {
        [cell setBackgroundColor:[self inactiveColour]];
        NSLog(@"Inactive");
    }
    else
    {
        [cell setBackgroundColor:[UIColor whiteColor]];
        NSLog(@"Active");
    }
    [[cell textLabel] setText:[medicine name]];
    [[cell detailTextLabel] setText:[NSString stringWithFormat:@"Next Due: %@",[medicine nextDueDate]]];
}

这很好,但如果我改变问题或活动属性,我希望得到新的单元格颜色,但我得到的是新的单元格颜色,但旧的颜色作为文本高亮,我可以'弄清楚原因。 我知道正在分配正确的颜色,因为在打印出正确的药物时我得到了

  

2013-09-17 23:05:28.121 Medicine Tracker [11611:907]截止2013-09-17

     

23:05:28.124 Medicine Tracker [11611:907]有效

这是正确的,但给出了错误的颜色

这是一张图片,可能会显示我的意思更好enter image description here

1 个答案:

答案 0 :(得分:0)

问题在于标签正在使用自己的背景颜色。

两种选择; A.将标签(文本)背景颜色设置为透明。 B.将标签背景颜色设置为您希望应用于整个单元格背景的颜色。

选项A:

[[cell textLabel] setBackgroundColor:[UIColor clearColor]];
[[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

选项B:

UIColor *backgroundColorNew = nil; 
Medicine *medicine = [self.fetchedResultsController objectAtIndexPath:indexPath];
if ([medicine isDue] == 1)
{
    backgroundColorNew = [self dueColour];
    NSLog(@"Due");
}
else if([medicine active] == [NSNumber numberWithInt:0])
{
    backgroundColorNew = [self inactiveColour];
    NSLog(@"Inactive");
}
else
{
    backgroundColorNew = [UIColor whiteColor];
    NSLog(@"Active");
}
//set all visibile backgrounds to the new color
[cell setBackgroundColor:backgroundColorNew];
[[cell textLabel] setBackgroundColor:backgroundColorNew];
[[cell detailTextLabel] setBackgroundColor:backgroundColorNew];

[[cell textLabel] setText:[medicine name]];
[[cell detailTextLabel] setText:[NSString stringWithFormat:@"Next Due: %@",[medicine nextDueDate]]];

而选项B通常会带来更高的显示性能,因为透明度通常会花费一些额外的周期。