6
votes

I want to set the background color of NSButton.There was nothing in the attribute inspector so i was wondering if there was any way to do it programmatically?

4

4 Answers

6
votes

System controls will need to follow the Apple look&feel, so you cannot easily change the background colour. If you want to accomplish this, you'll need to subclass NSButton and overwrite the drawRect: method. The downside is that you'll also need to handle the text drawing, and possibly different rendering based on button state.

Edit. Actually, you'll need to subclass the NSButtonCell class for the drawing stuff, more info can be found here: https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSButtonCell_Class/index.html#//apple_ref/doc/uid/20000093-SW15

6
votes

Other than subclassing you can use layer approach like this

NSButton *button = [[NSButton alloc] initWithFrame:frame];
[superView addSubView:button];
[button setWantsLayer:YES];
button.layer.backgroundColor = [NSColor blueColor].CGColor;

or you can make an image with that specified color and apply that image to the Button.

5
votes

I would recommend against cell subclassing. Cells are deprecated and on the way out.

NSButton does allow you to set an image without a bezel.

Subclassing NSView or NSControl, doing custom drawing and tracking states of mouse events and application active/window active to draw all the custom states is as effective if not better.

Cells don't know about AutoLayout so you should be careful if go to cell land.

4
votes

Use the background layer of the NSButton like so:

buttonName.layer.backgroundColor = NSColor.redColor.CGColor;