How to change the color of a NSToolbarItem's label
-
08-12-2019 - |
Question
I'd like to change the color of all of my NSToolbarItem
's labels.
I need to set it to white because it suits better to the background color of my NSWindow
, but it defaults to black and I haven't found a way to change it neither in Interface Builder nor directly by code (NSToolbarItem
implements setLabel
, but it just sets the text string).
If possible, I'd like to avoid:
- Replacing the whole
NSToolbar
by a customNSView
. Would feel like reinventing the wheel to me. - Having to create custom
NSView
s insideNSToolbarItem
. It would imply having to leave blank all of its labels and adding the white-colored label inside the custom view.
Solution
In case anyone is interested, I solved it by:
- Using custom views inside
NSToolbarItem
s containing both a button and a label. - Displaying icon only instead of icon + label in
NSToolbar
in order to hide the default label.
I had to deal with another problem related to a bug with Interface Builder: the custom view was not showing at all. I was able to fix it thanks to this answer.
OTHER TIPS
You can change it using NSMutableAttributeString. For example:
-(void) awakeFromNib{
NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:self.label];
NSRange titleRange = NSMakeRange(0, title.length);
[title addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:titleRange];
[self setLabel:title]; }
You have to subclass NSBarButtonItem and override the drawRect method for that. Otherwise it will use [NSColor controlTextColor]
or [NSColor disabledControlTextColor]
.