Reputation: 70785
I have an NSButton which I want to have a different background color when it's highlighted than when it's not (transparent on not highlighted, if that makes any difference).
At present, I have the following code
[view setWantsLayer:YES];
NSButton* button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
[button setBordered:FALSE];
[(NSButtonCell*)[button cell] setHighlightsBy:NSChangeBackgroundCellMask];
[view addSubview:button];
This will change the background to the default window background color on click. If I remove NSChangeBackgroundCellMask
the background goes away.
Is there an easy way I can have a different color for the background, or does this require me to subclass NSButton?
Upvotes: 7
Views: 7909
Reputation: 6140
Swift version of Cobbal's answer:
override func highlight(_ flag: Bool, withFrame cellFrame: NSRect, in controlView: NSView) {
//do nothing, to disable highlight
}
Upvotes: 0
Reputation: 70785
In the end, I solved it by subclassing NSButtonCell
and overwriting
- (void) highlight:(BOOL)flag withFrame:(NSRect)cellFrame inView:(NSView*)controlView
to make the changes I wanted (changing controlView.layer.backgroundColor
based on flag
)
Upvotes: 11
Reputation: 1751
You will need to subclass your NSButton
and override its mouseDown:
and mouseUp:
events, change the color of your NSButton
in these events.
Upvotes: 2