Search code examples
objective-cmacoscocoanstabview

How to change the color of the tab button and the view itself in NSTabView?


I am working on OS X app, and I am using NSTabView. I would like to change the background color of the tab (button). Currently the background is blue, (Attribute Inspector -> Appearance = Inherited (Aqua).

Same is true with the background color of the view itself. I subclass the NSTabView, and I add inside this code:

 CGContextRef context = (CGContextRef) [[NSGraphicsContext currentContext] graphicsPort];
 CGContextSetRGBFillColor(context, 241.0/255.0, 252.0/255.0, 255.0/255.0, 1.0);
 CGContextFillRect(context, NSRectToCGRect(dirtyRect));

which does change the background color, but also cover the tabs with the background color...

Any help with customization of the NSTabView will be deeply appreciated.

For those who will jump to conclusion that this is duplicate question...please take a look on the dates in the answers on similar questions...they are all old about 7-8 years...


Solution

  • After a couple of hours, I think you can't do it with NSTabView. The documentation says you can no longer do it and NSTabView will respect the theme chosen by the OS instead.

    This led me to How to draw your own NSTabView tabs?, which I'm sure you've seen. But despite the documentation, SetImage/ForSegment did not work for me.

    [NSSegmentedControl Colors seems to have found one solution, and SMSegmentView is another, although there may be licensing issues. Both these solutions are more recent.

    I hope the above will prove useful to you and good luck.