gpt4 book ai didi

objective-c - 如何使具有相同选项的多个菜单保持同步?

转载 作者:行者123 更新时间:2023-12-03 17:07:06 27 4
gpt4 key购买 nike

显然,我的应用程序在菜单栏中有一个主菜单。这些菜单项之一包含一个子菜单,该子菜单也可以在我的应用程序其他位置的 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] * Assertion failure in -[NSMenuItem setSubmenu:], /SourceCache/AppKit/AppKit-1038.35/Menus.subproj/NSMenuItem.m:695

最佳答案

使用 -copy 完成了这项工作,但后来我注意到弹出按钮中出现了所有键盘快捷键,这看起来很奇怪,所以我最终只是迭代主菜单的项目并像这样动态构建它:

NSMenu *mainAddMenu = [[[[[NSApp mainMenu] itemWithTitle:@"Project"] submenu] itemWithTitle:@"Add"] submenu];
NSMenu *addMenu = [[[NSMenu alloc] initWithTitle:@"Add"] autorelease];
for (NSMenuItem *addMenuItem in [mainAddMenu itemArray]) {
[addMenu addItemWithTitle:[addMenuItem title] action:[addMenuItem action] keyEquivalent:@""];
}

关于objective-c - 如何使具有相同选项的多个菜单保持同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4478802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com