如何将具有相同标题的多个菜单项添加到NSPopUpButton(NSMenu)?

Wil*_*ear 5 macos cocoa nsmenu nspopupbutton

正如文档所说,如果两个菜单项都具有相同的标题,则无法向NSPopUpButton添加两个菜单项.我试图将菜单项添加到[popupButton菜单],但没有运气.我还试图创建一个新菜单,添加项目然后使用[popupButton setMenu:newMenu],但没有.菜单始终只显示每个名称一个项目.

但我知道应该可以,如果你尝试在iTunes中创建一个智能播放列表,你可以从左侧弹出按钮选择"播放列表",从中间选择"=",右边的一个将为每个播放列表保存菜单项. iTunes即使他们有相同的标题.那他们怎么做呢?

Ken*_*agh 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:)];
}
Run Code Online (Sandbox Code Playgroud)


小智 1

我遇到了确切的问题并且很容易解决。我没有使用\xe2\x80\x93addItemWithTitle:等NSPopUpButton方法来操作按钮项目,而是添加了一个NSArrayController并将项目添加到数组控制器中。然后我使用绑定来绑定控制器和弹出按钮,现在它显示具有相同标题的项目。

\n\n

进行绑定:

\n\n
    \n
  1. 在IB中添加一个NSArrayController
  2. \n
  3. “Content”的NSPopUpButton绑定设置为数组控制器,“ Controller Key ”为“arrangedObjects”
  4. \n
  5. “Selected Index”的NSPopUpButton绑定设置为数组控制器,“Controller Key”“selectionIndex”
  6. \n
  7. [可选] 选择数组控制器并将属性中的类名称设置为您的项目所属的任何类,例如NSString,或者您可以使用默认的NSMutableDictionary并在下面的框中添加键,这样您就可以将项目包装在字典中并添加不同的键用于您想要在弹出按钮中显示的内容以及您想要在后台显示的内容。要设置要在弹出按钮中反映的字典的键,请再次转到弹出按钮的“内容”绑定,并将“模态键路径”设置为您在数组控制器属性中添加的键。
  8. \n
\n