1

我想在NSForm. 我认为这将是子类化 NSForm 和覆盖-drawCellAtRow:column:. 但-drawCellAtRow:column:只有在单元格获得焦点时才会被调用。

我已经尝试过调用-setCellBackgroundColorNSForm但这会改变标题背景,而不是值。

有没有我找不到的方法?

4

1 回答 1

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,或者只使用标签和文本字段。

于 2012-12-11T19:54:43.153 回答