以编程方式在其中创建带有NSMenuItems的NSMenu?

时间:2011-07-15 12:16:09

标签: cocoa menu nsmenuitem nsmenu

首先,我想指出这个问题可能已被提出,我只是找不到任何答案。

所以,我正在以编程方式尝试为主栏创建一个NSMenu和NSMenuItem,所以fe。 NSMenu将是File,然后它将包含3x NSMenuItem,New,Open和Save。

但没有任何效果,这就是我目前所拥有的:

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 个答案:

答案 0 :(得分:29)

设置菜单时,可以设置为该项目显示的菜单,而不是其父菜单。

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

[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]锚定到用户界面。