Search code examples
macoscocoanstoolbar

How to customize the context menu of NSToolbar?


I need to remove some items from right-click context menu, but the toolbar does not contain a public API to access 'toolbarView'.

Is it possible to customize the menu without using private API?


Solution

  • You can access and modify a toolbar contextual menu when the toolbar is created, i.e. in -[awakeFromNib]:

    - (NSMenu *)toolbarMenuInWindow:(NSWindow *)window
    {
        NSView *contentView = window.contentView;
        NSView *toolbarView = contentView.superview.subviews.lastObject;
        NSMenu *toolbarMenu = toolbarView.menu;
        return toolbarMenu;
    }
    

    Now you can directly edit menu items and hide or disable them.