NSCell自定义亮点

时间:2011-02-18 12:36:33

标签: cocoa nscell

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

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

自定义绘制突出显示的单元格:

enter image description here

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

enter image description here

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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];
}

关键是要确保您为nil返回highlightColorWithFrame:inView:以停止drawInteriorWithFrame:inView:绘制背景,然后仍然将其调用以绘制主要内容(在本例中为文字)。< / p>