正如文档所说,如果两个菜单项都具有相同的标题,则无法向NSPopUpButton添加两个菜单项。我试图将菜单项添加到[popupButton菜单],但没有运气。我还试图创建一个新菜单,添加项目然后使用[popupButton setMenu:newMenu],但没有。菜单始终只显示每个名称一个项目。
但是我知道应该可以,如果你尝试在iTunes中创建一个智能播放列表,你可以从左侧弹出按钮选择“播放列表”,从中间选择“=”,右边一个将保存菜单项iTunes EVEN中的每个播放列表,如果它们具有相同的标题。那他们怎么做呢?
答案 0 :(得分:5)
虽然像addItemWithTitle:和addMenu:这样的NSPopUpButton方法不允许重复名称,但绝对可以使项目具有相同的标题。您只需在NSMenuItem本身上设置名称即可。
例如,如果您有一个字符串数组(可能是播放列表名称),您想将它们添加到弹出按钮,并希望确保重复项存在,请执行以下操作:
NSArray* items = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", @"Foo", nil];
for (NSString* item in items)
{
[popupButton addItemWithTitle:@"blah"];
[[popupButton lastItem] setTitle:item];
[[popupButton lastItem] setTarget:self];
[[popupButton lastItem] setAction:@selector(something:)];
}
答案 1 :(得分:2)
您可以手动创建NSMenuItem并将其直接添加到菜单中,而不是使用addItemWithTitle:
。这允许您指定所需的任何标题,并且可以将其插入菜单中的任何位置。
NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];
[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
答案 2 :(得分:1)
我遇到了确切的问题,很容易解决。我没有使用 NSPopUpButton 方法(例如 -addItemWithTitle:)来操作按钮项,而是添加了一个 NSArrayController 并将项目添加到数组控制器中。然后我使用绑定绑定控制器和弹出按钮,现在它显示具有相同标题的项目。
进行绑定: