7

正如文档所说,如果它们都具有相同的标题,则不可能向 NSPopUpButton 添加两个菜单项。我试图将菜单项添加到 [popupButton menu],但没有运气。我还尝试创建一个新菜单,向其中添加项目,然后使用 [popupButton setMenu:newMenu],但没有。菜单总是每个名称只显示一项。

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

4

4 回答 4

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:)];
}
于 2010-02-24T06:39:41.927 回答
3

addItemWithTitle:您可以手动创建一个 NSMenuItem 并将其直接添加到菜单中,而不是使用。这使您可以指定所需的任何标题,并能够将其插入菜单中的任何位置。

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

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
于 2010-02-25T00:00:24.400 回答
1

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

要进行绑定:

  1. 在 IB 中添加一个NSArrayController
  2. “Content”的NSPopUpButton绑定设置为 Array Controller,其中“ Controller Key ”为“arrangedObjects”
  3. “Selected Index”的NSPopUpButton绑定设置为 Array Controller,“Controller Key”“selectionIndex”
  4. [可选] 选择数组控制器并将属性中的类名称设置为您的项目的任何类,例如NSString或者您可以使用默认的NSMutableDictionary并在下面的框中添加键,因此您可以将项目包装在字典中并添加不同的键对于您想要在弹出按钮中显示的内容以及您想要在背景中显示的内容。要设置要在弹出按钮中反映字典的哪个键,请再次转到弹出按钮的“内容”绑定,并将“模态键路径”设置为您在数组控制器属性中添加的键。
于 2010-03-01T21:36:05.717 回答
0

Swift 5 使用保证的唯一标题添加,然后在下一条语句中更改标题。

  • "accountPU" 是 NSPopUpButton 对象
  • “来自”是一个帐户对象。
    accountPU.addItem(withTitle: "\(from.accountID!)")      
    accountPU.lastItem!.title = from.name
于 2021-11-10T01:39:18.757 回答