2012-03-05 138 views
1

我想在NSForm中单独设置单元格背景颜色。我认为这将是NSForm的子类化并覆盖-drawCellAtRow:column:。但-drawCellAtRow:column:只在细胞获得焦点时被调用。如何更改NSForm中的单个单元格背景颜色?

我试过在NSForm上调用-setCellBackgroundColor,但这改变了标题背景,而不是值。

有没有我找不到的方法?

回答

1

我认为这对NSFormCell来说是不可能的。

我想的第一件事:

self.form.drawsCellBackground = YES; 
self.form.cellBackgroundColor = [NSColor redColor]; 

这似乎绘制背景仅次于标签。一些进一步的测试表明,单个NSFormCell跨越标签和文本字段,并且背景都在后面。当文本字段在顶部绘制时,它自己的背景会覆盖红色。

接下来我将子类NSFormCell。唯一要调用的方法是-drawWithFrame:inView:。该框架再次跨越标签和文本字段。控制视图是NSForm。如果我绘制自己的背景,然后调用[super drawWithFrame:inView:],它将如上所示,在标签后面可见,但在文本字段后面不可见。如果我调用super并绘制背景,则会出现在两者之上。

NSFormCell的实现不会调用-drawInteriorWithFrame:inView:也不会提供另一个覆盖点。

我尝试设置highlighted,并实施-highlightColorWithFrame:inView: - 同样的问题。

虽然我想了解这一切如何工作,我也尝试了NSForm的子类。唯一与图形相关的方法是-drawRect:。从不调用这些方法:-drawCellAtIndex:-drawCellAtRow:column:,-drawCell:,-drawCellInside:

除了让Apple解决这个问题外,我看到的唯一解决方案是尝试使用NSForm的超类NSMatrix,或者只是使用标签和文本字段。

相关问题