-->

NSButton set background color macOS 10.12

2019-08-01 03:49发布

问题:

I have NSButtons created in Storyboard that I would like to change the background color for. I have searched SO and Google but none of the solutions actually work on my project or even a simple test project. I've tried:

  1. Setting the button.layer.backgroundColor (including with and without importing QuartzCore and setting wantsLayer).
  2. Getting the NSButtonCell from the NSButton and changing the background color. I've tried this with bordered, unbordered, transparent, etc. No change in background color. I've tried changing from square to gradient, no luck.

回答1:

This must be a bug in macOS. I can make the NSButtonCell respond to backgroundColor simply by subclassing with an EMPTY class with one EMPTY override:

class ColorButtonCell: NSButtonCell {
    override func draw(withFrame cellFrame: NSRect, in controlView: NSView) {
        super.draw(withFrame: cellFrame, in: controlView)
    }
}

When using this subclass, it all works as expected!