如何更改NSForm中的单个单元格背景颜色?

时间:2012-03-05 22:15:46

标签: macos cocoa nscell nsmatrix nsform

我想在NSForm中单独设置单元格背景颜色。我认为这将是子类化NSForm并覆盖-drawCellAtRow:column:的问题。但是-drawCellAtRow:column:仅在单元格获得焦点时被调用。

我已尝试在-setCellBackgroundColor上调用NSForm,但会更改标题背景,而不是值。

有没有我找不到的方法?

1 个答案:

答案 0 :(得分: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,或者仅使用标签和文本字段。