我一直在玩一些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];
}
任何人都可以向我解释为什么会这样发生吗?
答案 0 :(得分:0)
你能发布cellForRowAtIndexPath的代码吗?
你为什么不尝试使用
cell.textLabel.textColor = [UIColor purpleColor];
答案 1 :(得分:0)
您的-drawRect:
实现实际上并没有进行任何绘制,因此它本身不会改变任何内容。
据推测,绘图是由与您的视图相关联的图层完成的。看起来,在您的环境中,背景色图层在调用-drawRect:
方法之前正在进行绘制。重绘图层时,您的-drawRect:
方法也恰好被调用。因此,在更改背景颜色后,在背景图层再次绘制之前,您看不到任何更改,您可以告诉它,因为再次调用-drawRect:
。
如果您希望立即应用颜色更改,则需要将视图标记为需要显示,以便使用更改的背景颜色完全重绘。