Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Since the toolbar integrates into the window title bar, you need to draw both the title bar and the toolbar. Which basically means you need to take over drawing for the entire window.

This requires "swizzling" which, while it works well, is not supported by Apple and therefore may get your app rejected from the app store.

Basically you need to inject your own code into the NSWindow class, by using objective-c runtime functions to modify the class definition. Note that this will affect all windows in your app, so you will need to have an if statement checking if this is a window you want to modify.

Subclass NSWindow, and in the +initialize method, find the "frame view" class which is the one that does most of the window drawing, and rename it's "drawRect:" method to "originalDrawRect:". Then you define a new "drawRect:" method on the class, as a duplicate of a method in your NSWindow subclass. This method should first call originalDrawRect and then do custom drawing on top of it.

Note: you will be drawing over the top of the window title text... so'll need to change the the drawing mode to kCGBlendModeColor or something. Or else just draw the title string again. You can ask the window where the title text should be drawn.

Here's a full article with more details: http://parmanoir.com/Custom_NSThemeFrame

Thanks! While I want the app to be approved by Apple I think I'll not use this but it's a very good approach and it was a good exercise, the best one I'd found after two days searching. I'll use de default gray and I'll adjust my design to it. Fernando Mata Oct 15, 2014 at 19:17 It's a shame Apple doesn't provide a public API for doing this. Many of their own apps do it. Abhi Beckert Oct 15, 2014 at 22:44

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question . Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers .