以编程方式创建带有 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?的主要内容,如果未能解决你的问题,请参考以下文章