UITableViewCell中的UILabel backgroundColor始终恢复为初始值

时间:2010-10-05 17:08:59

标签: iphone uitableview ios4 uilabel uicolor

在我的应用程序中,我有一个UITableViewCell,用于显示背景颜色设置。在detailTextLabel中,它显示颜色的名称,背景设置为实际颜色,例如[UIColor cyanColor]。请注意,我只设置detailTextLabel的背景,而不是整个UITableViewCell。当用户点击单元格时,他们会被带到另一个UITableView,让他们选择一种颜色,当他们返回到之前的UITableView时,UILabel的backgroundColor会更新为新颜色。

问题是,每当我返回初始的UITableView时,UILabel的backgroundColor会立即更新,然后返回初始颜色。我无法找出它为什么要还原。有什么建议吗?

谢谢!

4 个答案:

答案 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;
        }
    }

然后当我分配这个单元格时,我指定了突出显示的和非高亮显示的背景颜色。

这非常有效 - 当我选择单元格时,颜色就是我想要的颜色。