【问题标题】:How can I change individual cell background colors in an NSForm?如何更改 NSForm 中的单个单元格背景颜色?
【发布时间】:2012-03-23 09:51:56
【问题描述】:

我想在NSForm 中单独设置单元格背景颜色。我认为这是继承 NSForm 并覆盖 -drawCellAtRow:column: 的问题。但是-drawCellAtRow:column: 只有在单元格获得焦点时才会被调用。

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

有没有我找不到的方法?

【问题讨论】:

    标签: macos cocoa nscell nsmatrix nsform


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-28
      • 1970-01-01
      • 2017-11-04
      • 2011-09-24
      • 2013-04-12
      • 2021-10-31
      • 2011-04-03
      • 2016-05-27
      相关资源
      最近更新 更多