关闭

MacOS 开发 - NSMenu 添加菜单栏

标签: NSMenuNSMenuItemkeyEquivalMacOS-目录MacOS-开发
2630人阅读 评论(1) 收藏 举报
分类:


添加顶部(mainMenu)目录

简单常用的一级目录

- (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];
}

添加二三级目录

- (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/

0
0
查看评论

osx 代码创建自定义NSMenu & NSMenuItem

// unichar arrowKey = 'r'; NSString *refresh = [NSString stringWithCharacters:&arrowKey length:1]; // // NSString *hom...
  • Jason_chen13
  • Jason_chen13
  • 2017-06-19 17:29
  • 776

NSMenu的相关操作

- (NSMenu *) menu { NSMenu *menu = [[NSMenu alloc] initWithTitle:@""]; NSMenuItem *item = nil; NSArray *standardItems = [[self use...
  • yuanya
  • yuanya
  • 2014-11-04 08:55
  • 2048

(NSMenu,NSMenuItme)如何在菜单栏添加新的菜单

方法1 //main menu NSMenu *mainMenu = [NSApp mainMenu]; //NSLog(@"%@",mainMenu); //NSLog(@"%@",[mainMenu itemArray]); //menu...
  • zhjwwdz
  • zhjwwdz
  • 2014-02-26 15:03
  • 2169

Mac开发,NSMenu、NSMenuItem的简单使用

在想要显示菜单的视图文件中添加如下代码: -(void)rightMouseDown:(NSEvent *)event{     //创建Menu     NSMenu *theMenu = [[NSMenu alloc] initWithTi...
  • sinat_31177681
  • sinat_31177681
  • 2017-12-21 17:50
  • 87

手工构建 Mac OS APP (一)

手工构建 Mac OS APP (一)Table of Contents手工建立 Mac OS APP?main 函数中的故事最简结构app 程序的简单结构做点事情略进一步带主菜单的 app状态栏菜单手工调试再进一步?Aout Me手工建立 Mac OS APP?Mac OS App 开发并不复杂,...
  • ccat
  • ccat
  • 2012-09-27 20:27
  • 19056

NSPopover使用

- (IBAction)alertButton:(id)sender {     mypopoverView = [[MyPopoverViewController alloc] initWithNibName:@"MyPo...
  • qq_27740983
  • qq_27740983
  • 2015-12-16 17:03
  • 1518

NSObject的内省方法

NSObject的内省方法      内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富。内省是对象揭示自己作为一个运行时对象的详细信息的一种能力。这些详细信息包括对象在继承树上的位置,对象...
  • u014536527
  • u014536527
  • 2016-03-30 09:12
  • 951

osx Application代码实现NSMenu

代码创建NSMenu
  • zfphp
  • zfphp
  • 2016-01-21 10:49
  • 527

NSPopUpButton创建菜单与子菜单

NSPopUpButton *popup = [[NSPopUpButton alloc] initWithFrame:   NSMakeRect(0, 0, 150, 22)];   id item;  ...
  • yuanya
  • yuanya
  • 2014-11-04 10:09
  • 1420

MacOS 开发 - NSMenu 添加菜单栏

添加顶部目录 简单常用的一级目录 添加二三级目录 添加 Dock 菜单 状态栏NSStatusItem添加菜单 给一个NSView添加右击菜单 小结 参考资料添加顶部目录简单常用的一级目录- (void)addMenu{ //获取主目录 NSMenu *mainMenu = [NSAp...
  • lovechris00
  • lovechris00
  • 2017-09-16 11:14
  • 2630
    博客专栏
    个人资料
    • 访问:210173次
    • 积分:3453
    • 等级:
    • 排名:第11457名
    • 原创:127篇
    • 转载:6篇
    • 译文:1篇
    • 评论:96条
    最新评论