cocoa - NSCell 自定义突出显示

标签 cocoa nscell

我正在尝试子类化 NSCell 来绘制自定义背景突出显示。该文档似乎建议重写 highlight:withFrame:inView: 应该允许我执行此操作,但该方法永远不会被调用。

相反,我重写了 drawInteriorWithFrame:inView: ,它工作得很好 - 我可以在单元格中绘制我想要的内容。然而,问题是我必须自己绘制所有内容,从而失去了我正在扩展的 NSCell 类型的功能 - 例如 NSTextFieldCell 显示文本的能力:

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

enter image description here

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

enter image description here

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

非常感谢任何帮助。

最佳答案

感谢@Bvarious 的帮助,我已经成功解决了这个问题。我的扩展 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];
}

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

关于cocoa - NSCell 自定义突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041349/

相关文章:

objective-c - respondsToSelector 方法必须存在吗?

cocoa - 无法隐藏 NSView 中的控件

objective-c - 播放声音文件 (.aif) 的简单方法

objective-c - NSCell 重绘问题

objective-c - 改变披露三角形的方向

xcode - OpenGL 中的精度/单位

swift - 隐藏 NSSearchField 的 lupe 图标

objective-c - 如何从过滤的 NSTableView 中一致地获取选定的单元格值?

objective-c - NSOutlineView 更改组行颜色

objective-c - 制作一个具有开/关状态的自定义 NSButton,但仍处理 IBActions