NSToolbar 只保留自定義工具欄選項

weixin_34393428發表於2018-10-18

Updated 1:

According to @Khundragpan and [this post](https://stackoverflow.com/questions/8413111/how-to-customize-the-context-menu-of-nstoolbar), problem 1 can be solved by:

 if let contextMenu = window?.contentView?.superview?.menu {

  for item in contextMenu.items {

    if item.title != "Customize Toolbar…" {
      contextMenu.removeItem(item)
    }

  }

}

But I don't think it's the best way.

Update 2:

Another way to solve problem 1 (thanks to @1024jp to point out this file):

 if let contextMenu = window?.contentView?.superview?.menu {

   contextMenu.items.forEach({ (item) in

    if let action = item.action,

    NSStringFromSelector(action) != "runToolbarCustomizationPalette:" {

      contextMenu.removeItem(item)

    }

  })

}

Update 3:

A ton of thanks to @1024jp for helping me. I'm able to remove those things with a few tips and tricks from him. Check the answer below.

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.

相關文章