使用编程方式创建包含NSMenuItems的NSMenu?

15

首先,我想指出这个问题可能已经被问过了,只是我没有在它们中找到任何答案。

所以,我正在尝试通过编程方式将NSMenu和NSMenuItem添加到主菜单栏中。例如,NSMenu将是“文件”,然后它将有3个NSMenuItem,分别为“新建”,“打开”和“保存”。

但是什么都不起作用,这是我当前的代码:

NSMenu *fileMenu = [[NSMenu alloc] initWithTitle:@"File"];
NSMenuItem *newMenu = [[NSMenuItem alloc] initWithTitle:@"New" action:NULL keyEquivalent:@""];
NSMenuItem *openMenu = [[NSMenuItem alloc] initWithTitle:@"Open" action:NULL keyEquivalent:@""];
NSMenuItem *saveMenu = [[NSMenuItem alloc] initWithTitle:@"Save" action:NULL keyEquivalent:@""];
[newMenu setMenu:fileMenu];
[openMenu setMenu:fileMenu];
[saveMenu setMenu:fileMenu];

但是什么都没有发生,我很确定我需要告诉应用程序它应该使用fileMenu,但是我该如何做到这一点?如果这不是问题,那么问题是什么?我对这方面的知识还比较新,但有兴趣学习,所以任何提示都比没有强!

1个回答

30

当你设置菜单时,你设置的是该项目显示的菜单,而不是其父菜单。

要将这三个项目添加到菜单中,请使用:

[fileMenu addItem: newMenu];
[fileMenu addItem: openMenu];
[fileMenu addItem: saveMenu];

然后将菜单添加到菜单栏中:

NSMenuItem *fileMenuItem = [[NSMenuItem alloc] initWithTitle: @"File"];
[fileMenuItem setSubmenu: fileMenu]; // was setMenu:
[[NSApp mainMenu] addItem: fileMenuItem];
[fileMenuItem release];

每个菜单都拥有多个菜单项;单个菜单项可以负责子菜单;所有这些菜单都通过[NSApp mainMenu]锚定到UI。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接