作为文档说这是不可能添加两个菜单项NSPopUpButton如果他们都有相同的标题。我试图菜单项添加到[popupButton菜单],但没有运气。我也在试图创建一个新的菜单项目添加到它的,然后使用[popupButton setMenu:newMenu],但没有。菜单总是显示只有一个项目每名称。

但我知道它应该是可能的,如果你尝试建立一个智能放在iTunes,你可以选择"的播放列表"从左边的弹出窗按钮,"="从中间和权利之一将举行的菜单项的每一个播放列表,在iTunes即使他们有同样的标题。所以他们怎么做?

有帮助吗?

解决方案

我不得不确切的问题,这是解决很容易。而不是使用 NSPopUpButton 等方法 –addItemWithTitle: 操纵的按钮的项目,我加入 NSArrayController 和加入的项目进入阵控制,而不是。然后我用绑绑定的控制器和弹出按钮现在它显示了项目用同样的标题。

要做到的绑定:

  1. 增加一个 NSArrayController 在IB。
  2. 设置 NSPopUpButton 绑定的 "内容" 对阵控制器"控制器的关键"正 "arrangedObjects"
  3. 设置 NSPopUpButton 绑定的 "选择的索引" 对阵控制的 "关键控制器" 正在 "selectionIndex"
  4. [可选择]选择阵控制和设置 类名称 在属性的任何类项目例如 NSString 或者您可以使用的默认 NSMutableDictionary 并添加钥匙盒下面,这因此可以让你把你的项目在字典,并增加不同的钥匙为什么你想要显示在弹出按钮什么你要在背景。设置这关键的字典你想要反映在出现的按钮,去弹出按钮的绑定的 "内容" 再次,并设置 "模式的关键路径" 到钥匙你加入的阵控制的属性。

其他提示

虽然NSPopUpButton方法,如addItemWithTitle:和addMenu:不允许重名,这绝对是可以有相同的标题项。您只需设置上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:)];
}

除了使用addItemWithTitle:的,可以手动创建NSMenuItem和直接将它添加到菜单中。这使您可以指定任何你想要的标题,以及能够在菜单中的任何位置插入它。

NSMenuItem* newItem = [[NSMenuItem alloc] initWithTitle:@"foo" action:@selector(something:) keyEquivalent:@""];

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top