题
我正在尝试子类化 NSCell
绘制自定义背景突出显示。该文档似乎表明最重要的 highlight:withFrame:inView:
应该允许我这样做,但该方法永远不会被调用。
相反,我已经重写了 drawInteriorWithFrame:inView:
效果很好 - 我可以在单元格中画出我想要的东西。然而,问题是我必须自己绘制所有内容,失去了我正在扩展的 NSCell 类型的功能 - 例如 NSTextFieldCell 显示文本的能力:
自定义绘制突出显示的单元格:
但是,我只想重绘背景(突出显示),并保留使用扩展单元格主要功能的能力:
当然,我也可以自己绘制文本,但我希望有一种更简单的方法来做到这一点。
任何帮助深表感谢。
解决方案
感谢@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];
}
关键是要确保你能回来 nil
为了 highlightColorWithFrame:inView:
停止 drawInteriorWithFrame:inView:
绘制背景,但仍然调用它来绘制主要内容(在本例中为文本)。
不隶属于 StackOverflow