When creating Cocoa bevel button with custom image and alternate image I'm having a strange behavior. In the pressed state the button background becomes white. I'm adding the button as subview of a transparent window (HUD window).
I'm trying every technique that I know:
NSButton *closeButton = [[NSButton alloc] initWithFrame:NSMakeRect(0.0, 0.0, 30.0, 30.0)];
[closeButton setFrameOrigin:NSMakePoint(0.0, 0.0)];
[closeButton setImagePosition:NSImageOnly];
[closeButton setAction:@selector(closeWindowAction:)];
[closeButton setBordered:NO];
[closeButton setTransparent:NO];
[closeButton setImage:[NSImage imageNamed:@"icon-tclose-off"]];
[closeButton setAlternateImage:[NSImage imageNamed:@"icon-tclose-on"]];
[closeButton setBezelStyle:NSShadowlessSquareBezelStyle];
[closeButton setButtonType:NSMomentaryLightButton];
//[[closeButton cell] setBackgroundColor:[NSColor clearColor]];
[[closeButton cell] setHighlightsBy:NSChangeBackgroundCellMask|NSCellLightsByContents];
//[[closeButton cell] setHighlightsBy:NSContentsCellMask];
//[[closeButton cell] setShowsStateBy:0|NSContentsCellMask];
I also tried
[closeButton setButtonType:NSMomentaryChangeButton];
[[closeButton cell] setHighlightsBy:NSContentsCellMask];
with no results.
You can see the wrong behavior in the attached screenshots:
Bevel button overlaying a HUD window:
Wrong bevel button background:
Depending on your situation, this may also work:
Change the style of the button to Bevel or Square, the mode should be set to "Momentary Change" and Border, Transparent, Mixed and Selected should be OFF. This is how I fixed the white background problem on my buttons.
I have made it work by setting cell.highlightsBy
to ContentsCellMask
:
let btn = NSButton(frame: myFrame)
btn.image = myButtonImage
btn.image?.size = myFrame.size
btn.imagePosition = .ImageOnly
btn.bordered = false
(btn.cell as? NSButtonCell)?.highlightsBy = .ContentsCellMask
view.addSubview(btn)
This way the button is darkened when pressed, but no ugly square appears. Tested only in El Capitan).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With