在我的应用程序中,我有一个UITableViewCell,用于显示背景颜色设置。在detailTextLabel中,它显示颜色的名称,背景设置为实际颜色,例如[UIColor cyanColor]
。请注意,我只设置detailTextLabel的背景,而不是整个UITableViewCell。当用户点击单元格时,他们会被带到另一个UITableView,让他们选择一种颜色,当他们返回到之前的UITableView时,UILabel的backgroundColor会更新为新颜色。
问题是,每当我返回初始的UITableView时,UILabel的backgroundColor会立即更新,然后返回初始颜色。我无法找出它为什么要还原。有什么建议吗?
谢谢!
答案 0 :(得分:7)
一些基于状态的属性由表视图设置;我相信背景颜色就是其中之一。换句话说,表格视图正在改变detailTextLabel
的背景颜色,可能是取消选择的一部分。
在表视图设置基于状态的属性之后,表委托最终有机会更新每个单元格的外观。这是在委托的tableView:willDisplayCell:forRowAtIndexPath:
方法中完成的。也许如果你在这种方法中设置detailTextLabel
的背景颜色,你的问题就会消失。
答案 1 :(得分:0)
当cellForRowAtIndexPath执行时,它通常会创建并返回一个新单元格。
从您的问题来看,目前还不清楚您是否正在重建细胞,但如果您是,则可以解释您描述的行为。
答案 2 :(得分:0)
是..也许你没有在cellForRowAtIndexPath方法中重复使用你的细胞。 如果是,请尝试重新使用您的单元格,而不是每次都创建新单元格。
答案 3 :(得分:0)
我解决这个问题的方法是创建一个名为HighlightedLabel的UILabel子类,它具有以下初始化器:
- (id)initWithHighlightedBackgroundColor:(UIColor *)highlightedBackgroundColor nonHiglightedBackgroundColor:(UIColor *)nonHighlightedBackgroundColor
{
self = [super init];
if(self)
{
_highlightedBackgroundColor = highlightedBackgroundColor;
_nonHighlightedBackgroundColor = nonHighlightedBackgroundColor;
self.backgroundColor = nonHighlightedBackgroundColor;
}
return self;
}
-(void)setHighlighted:(BOOL)highlighted
{
if(highlighted)
{
self.backgroundColor = self.highlightedBackgroundColor;
}
else
{
self.backgroundColor = self.nonHighlightedBackgroundColor;
}
}
然后当我分配这个单元格时,我指定了突出显示的和非高亮显示的背景颜色。
这非常有效 - 当我选择单元格时,颜色就是我想要的颜色。