0

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

- (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 医学追踪器[11611:907] 激活

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

这是一张可能更好地说明我的意思的图片在此处输入图像描述

4

1 回答 1

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 通常会导致更高的显示性能,因为透明度通常会花费一些额外的周期。

于 2013-09-17T22:30:55.970 回答