macOS 开发 - NSMenu 添加目录

文章目录

  • 一、添加顶部(mainMenu)目录
    • 1、简单常用的一级目录
    • 2、添加二三级目录
  • 二、添加 Dock 菜单
  • 三、状态栏(NSStatusItem)添加菜单
  • 四、给一个NSView添加右击菜单
  • 五、小结
  • 六、参考&推荐阅读:


一、添加顶部(mainMenu)目录

1、简单常用的一级目录

- (void)addMenu{//获取主目录NSMenu *mainMenu = [NSApp mainMenu];NSLog(@"%@ - %@",mainMenu,[mainMenu itemArray]);//添加一级目录NSMenuItem *oneItem = [[NSMenuItem alloc] init];[oneItem setTitle:@"Load_TEXT"];[mainMenu addItem:oneItem];//添加二级目录项NSMenu *subMenu = [[NSMenu alloc] initWithTitle:@"Load_TEXT"];[subMenu addItemWithTitle:@"Load1"action:@selector(load1) keyEquivalent:@"E"];[subMenu addItemWithTitle:@"Load2"action:@selector(load2) keyEquivalent:@"R"];[oneItem setSubmenu:subMenu];//更新[NSApp setMainMenu:mainMenu];
}

2、添加二三级目录

- (void)addMenu{NSImageView *imgView = [[NSImageView alloc]initWithFrame:NSMakeRect(100, 100, 100, 100)];[self.window.contentView addSubview:imgView];imgView.image = [NSImage imageNamed:@"apple"];//1.获取主目录NSMenu *mainMenu = [NSApp mainMenu];NSLog(@"%@ - %@",mainMenu,[mainMenu itemArray]);//2.添加一级目录NSMenuItem *oneItem = [[NSMenuItem alloc] initWithTitle:@"一级目录" action:nil keyEquivalent:@"O"];[oneItem setTitle:@"Load_TEXT"]; //设置文字无效[mainMenu insertItem:oneItem atIndex:2];//3.添加二级目录项NSMenu *subMenu = [[NSMenu alloc] initWithTitle:@"一级目录"]; //这里设置一级目录的名字有效[oneItem setSubmenu:subMenu];[subMenu addItemWithTitle:@"Load1"action:@selector(load1) keyEquivalent:@"E"];[subMenu addItemWithTitle:@"Load2"action:@selector(load2) keyEquivalent:@"T"];NSMenuItem *item3 = [[NSMenuItem alloc]initWithTitle:@"Load3" action:@selector(load2) keyEquivalent:@"T"];[subMenu addItem:item3];//4、添加三级目录NSMenu *subMenu3 = [[NSMenu alloc] initWithTitle:@"三级目录"];[item3 setSubmenu:subMenu3];//5、给三级目录添加子目录NSMenuItem *item30 = [[NSMenuItem alloc]initWithTitle:@"-30" action:@selector(load2) keyEquivalent:@"T"];NSMenuItem *item31 = [[NSMenuItem alloc]initWithTitle:@"-31" action:@selector(load2) keyEquivalent:@"T"];[subMenu3 addItem:item30];[subMenu3 addItem:item31];//更新[NSApp setMainMenu:mainMenu];
}

效果如图:

三级目录


二、添加 Dock 菜单

1、在 delegate.m 中添加属性:
@property (nonatomic,strong) NSMenu *dockMenu;


2、初始化 menu
2.1 添加简单的一级 menu

- (void)addDockMenu{self.dockMenu = [[NSMenu alloc] initWithTitle:@"DockMenu"];[self.dockMenu setAutoenablesItems:NO];NSMenuItem *oneItem = [[NSMenuItem alloc] initWithTitle:@"新的Dock目录" action:@selector(load1) keyEquivalent:@"P"];[oneItem setTarget: self];[self.dockMenu addItem:oneItem];}

效果如图:

Dock目录


2.2 添加二级目录,三级的话,可以参考上一部分的代码

- (void)addDockMenu{self.dockMenu = [[NSMenu alloc] initWithTitle:@"DockMenu"];[self.dockMenu setAutoenablesItems:NO];NSMenuItem *oneItem = [[NSMenuItem alloc] initWithTitle:@"新的Dock目录" action:@selector(load1) keyEquivalent:@"P"];[oneItem setTarget: self];[self.dockMenu addItem:oneItem];NSMenu *subMenu = [[NSMenu alloc] initWithTitle:@"一级目录"]; //这里设置一级目录的名字有效[oneItem setSubmenu:subMenu];[subMenu addItemWithTitle:@"Load1"action:@selector(load1) keyEquivalent:@"E"];}

3、在系统代理方法中返回该目录

- (NSMenu *)applicationDockMenu:(NSApplication *)sender
{return self.dockMenu;
}

三、状态栏(NSStatusItem)添加菜单

  NSMenu *subMenu = [[NSMenu alloc] initWithTitle:@"Load_TEXT"];[subMenu addItemWithTitle:@"Load1"action:@selector(load1) keyEquivalent:@"E"];[subMenu addItemWithTitle:@"Load2"action:@selector(load2) keyEquivalent:@"R"];statusItem.menu = subMenu;

NSStatusItem menu


四、给一个NSView添加右击菜单

  • 这里的快捷键可能无法直接使用。邮件点击该 View,再使用快捷键有效。
  • 一个目录可以添加给多个控件。
- (void)addViewMenu{NSMenu *newMenu = [[NSMenu alloc] initWithTitle:@"View 的目录"];NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"View 的item" action:@selector(load1) keyEquivalent:@"E"];[newItem setEnabled:YES];[newItem setTarget:self];[newMenu addItem:newItem];[self.indicater0 setMenu:newMenu];[self.indicater1 setMenu:newMenu];
}

View 的 menu


五、小结

  • 一级目录 和 二级目录 都属于 NSMenu 类。
  • 一级目录和二级目录的内容属于 NSMenuItem 类。
  • 一个一级目录下,只能有一个二级目录,只能用 setSubmenu 设置一级下的二级目录;
  • 二级目录下面可以有多个 item,可以用 addItemWithTitleinsertItemWithTitle 来添加。
  • keyEquivalent 是配置的快捷键,如果配置 E,则 command + shif + E 可以调用这个方法。 E 区分大小写,小写无效。
  • insertItem 的时候,需要注意 index 的位置。

insert


六、参考&推荐阅读:

http://blog.csdn.net/zhjwwdz/article/details/19980131

  • Tr-使用CCMenu和CCMenuItem添加菜单、右击菜单、Dock菜单 :
    http://tr4work.blog.163.com/blog/static/13714931420117511910513/

  • ixcn33:折叠或隐藏菜单中的菜单项
    https://isaacxen.github.io/2019/08/20/folding-or-hiding-menu-item/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部