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

Posted

技术标签:

【中文标题】以编程方式创建带有 NSMenuItems 的 NSMenu?【英文标题】:Creating NSMenu with NSMenuItems in it, programmatically? 【发布时间】:2011-10-06 02:45:18 【问题描述】:

首先,我想指出这个问题可能已经被问过了,我只是无法从他们那里找到任何答案。

所以,我正在以编程方式尝试在主栏上创建一个 NSMenu 和 NSMenuItem,所以是的。 NSMenu 将是 File,然后它将包含 3x 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】:

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

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

[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。

【讨论】:

以上是关于以编程方式创建带有 NSMenuItems 的 NSMenu?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式创建带有约束的视图

以编程方式创建带有 UI 的选项卡

以编程方式创建带有后退按钮的导航控制器

如何以编程方式创建带有内容的 UIImage [关闭]

在 Android 中以编程方式创建带有自定义列表项的 ListView - 没有 xml 列表项布局

为啥我以编程方式创建的按钮的样式不同?