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

时间:2013-11-19 05:40:51

标签: macos cocoa 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子类化?

3 个答案:

答案 0 :(得分:9)

最后,我通过继承NSButtonCell并覆盖

解决了这个问题
- (void) highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView*)controlView

进行我想要的更改(根据controlView.layer.backgroundColor更改flag

答案 1 :(得分:2)

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

答案 2 :(得分:0)

Cobbal答案的快速版本:

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