在突出显示时更改NSButton的背景颜色



我有一个NSButton,当它高亮显示时,我希望它的背景颜色与不高亮显示时不同(如果不高亮显示,则透明)。

目前,我有以下代码

[view setWantsLayer:YES];
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[button setBordered:FALSE];
[(NSButtonCell*)[button cell] setHighlightsBy:NSChangeBackgroundCellMask];
[view addSubview:button];

这将在单击时将背景更改为默认的窗口背景颜色。如果我去掉NSChangeBackgroundCellMask,背景就会消失。

有没有一种简单的方法可以让我有一个不同的背景颜色,或者这需要我子类NSButton?

最后,我通过子类化NSButtonCell和覆盖来解决它

- (void) highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView*)controlView

进行我想要的更改(基于flag更改controlView.layer.backgroundColor

您需要将NSButton的子类化并覆盖其mouseDown:mouseUp:事件,在这些事件中更改NSButton的颜色。

Cobal答案的Swift版本:

override func highlight(_ flag: Bool, withFrame cellFrame: NSRect, in controlView: NSView) {
        //do nothing, to disable highlight
}

最新更新