Поскольку в документах говорится, что невозможно добавить два пункта меню к NSPopUpButton, если у них обоих есть тот же заголовок. Я пытался добавить пункты меню к [popupButton меню], но без удачи. Я также пытался создать новое меню, добавить объекты к нему и затем использовать [popupButton setMenu:newMenu], но нет. Меню всегда отображает только один объект на имя.
Но я знаю, что должно быть возможно, при попытке создать умный плей-лист в iTunes, Вы могли бы выбрать "Плей-лист" из левой кнопки всплывающего меню, "=" с середины, и правильный будет содержать пункты меню для каждого плей-листа в iTunes, ДАЖЕ ЕСЛИ у них будет тот же заголовок. Таким образом, как они делают это?
У меня была точная проблема, и она была легко решена. Вместо использования методов NSPopUpButton , таких как –addItemWithTitle: для управления элементами кнопок, я добавил NSArrayController и вместо этого добавил элементы в контроллер массива. Затем я использовал привязки для привязки контроллера и всплывающей кнопки, и теперь он показывает элементы с одинаковыми названиями.
Для привязки:
Хотя методы 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];