【发布时间】:2010-12-19 00:27:40
【问题描述】:
显然,我的应用程序在菜单栏中有一个主菜单。其中一个菜单项包含一个子菜单,该子菜单也可以在我的应用程序的其他位置的 NSPopUpButton 中找到。
到目前为止,我只是在代码中复制菜单选项(以编程方式)以制作弹出按钮,但是当我更改选择器的名称或菜单项的标题等时,我不可避免地忘记了弹出按钮中的相同更改。
我想在一处定义菜单并在两处使用。这可能吗?
我试过了:
// Get the same menu used by the main menu
NSMenu *addMenu = [[[[[NSApp mainMenu] itemWithTitle:@"Project"] submenu] itemWithTitle:@"Add"] submenu];
NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease];
[item setImage:[NSImage imageNamed:NSImageNameAddTemplate]];
[item setOnStateImage:nil];
[item setMixedStateImage:nil];
addButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(2, 5, 26.0, 16.0)];
[addButton setPullsDown:YES];
[addButton setBordered:NO];
[[addButton cell] setUsesItemFromMenu:NO];
[[addButton cell] setMenuItem:item];
[[addButton cell] setArrowPosition:NSPopUpNoArrow];
[addButton setAutoresizingMask:NSViewMaxXMargin];
[addButton setToolTip:@"Add Files or Directories"];
// Use the same menu as the main menu
[addButton addItemWithTitle:@"Add"];
[[addButton lastItem] setSubmenu:addMenu]; // <--- Breaks here
不幸的是,这会导致运行时错误:
2010-12-19 02:56:11.571 MojiBaker[85384:a0f] * 断言 -[NSMenuItem setSubmenu:] 失败, /SourceCache/AppKit/AppKit-1038.35/Menus.subproj/NSMenuItem.m:695
【问题讨论】:
标签: objective-c cocoa macos menu appkit