5

我正在尝试子类化NSCell以绘制自定义背景突出显示。该文档似乎表明覆盖highlight:withFrame:inView:应该允许我这样做,但该方法永远不会被调用。

相反,我已经覆盖drawInteriorWithFrame:inView:了哪些工作正常 - 我可以在单元格中绘制我想要的内容。但是,问题是我必须自己绘制所有内容,失去了我正在扩展的 NSCell 类型的功能 - 例如 NSTextFieldCell 显示文本的能力:

自定义绘制的高亮单元格:

在此处输入图像描述

但是,我只想重新绘制背景(突出显示),并保留使用扩展单元格的主要功能的能力:

在此处输入图像描述

当然,我也可以自己绘制文本,但我希望有一种更简单的方法来做到这一点。

任何帮助深表感谢。

4

1 回答 1

11

感谢@Bavarious 的帮助,我设法解决了这个问题。我的扩展 NSTextFieldCell 类实现现在包含:

-(NSColor *)highlightColorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    return nil;
}

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
    if ([self isHighlighted]) {
        // Draw highlight background here
    }

    [super drawInteriorWithFrame:cellFrame inView:controlView];
}

关键是确保您返回nilforhighlightColorWithFrame:inView:以停止drawInteriorWithFrame:inView:绘制背景,但仍调用它来绘制主要内容(在本例中为文本)。

于 2011-02-18T13:03:24.070 回答