如何在Objective C中处理UIView的背景颜色?

时间:2011-06-03 16:02:06

标签: objective-c uiview uitableview background-color

我一直在玩一些Apple's example code来自定义UITableViewCells。我遇到了一些奇怪的行为让我对backgroundColor的工作方式感到困惑。

以下代码是自定义UITableViewCell中Apple的示例自定义UIView的缩减版本。 init函数将背景颜色设置为紫色,然后drawRect将背景颜色设置为绿色。我希望永远不会看到紫色,但这就是我所看到的。通过NSLog语句,我知道正在为每个单元调用init方法,然后为每个单元调用drawRect。绿色环境似乎被忽略了。如果我在初始加载后随时调用[self setNeedsDisplay],则背景会正确设置为绿色。

- (id)initWithFrame:(CGRect)frame {
    counter = 0;
    if ((self = [super initWithFrame:frame])) {
        self.opaque = YES;
        self.backgroundColor = [UIColor purpleColor];
    }
    return self;
}

- (void)drawRect:(CGRect)rect { 
    self.backgroundColor = [UIColor greenColor];
}

任何人都可以向我解释为什么会这样发生吗?

2 个答案:

答案 0 :(得分:0)

你能发布cellForRowAtIndexPath的代码吗?

你为什么不尝试使用

cell.textLabel.textColor = [UIColor purpleColor];

答案 1 :(得分:0)

您的-drawRect:实现实际上并没有进行任何绘制,因此它本身不会改变任何内容。

据推测,绘图是由与您的视图相关联的图层完成的。看起来,在您的环境中,背景色图层在调用-drawRect:方法之前正在进行绘制。重绘图层时,您的-drawRect:方法也恰好被调用。因此,在更改背景颜色后,在背景图层再次绘制之前,您看不到任何更改,您可以告诉它,因为再次调用-drawRect:

如果您希望立即应用颜色更改,则需要将视图标记为需要显示,以便使用更改的背景颜色完全重绘。