我在表视图中创建单元格时运行了以下代码
- (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]有效
这是正确的,但给出了错误的颜色
这是一张图片,可能会显示我的意思更好
答案 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通常会带来更高的显示性能,因为透明度通常会花费一些额外的周期。