Как добавить несколько пунктов меню с тем же заголовком к NSPopUpButton (NSMenu)?

Поскольку в документах говорится, что невозможно добавить два пункта меню к NSPopUpButton, если у них обоих есть тот же заголовок. Я пытался добавить пункты меню к [popupButton меню], но без удачи. Я также пытался создать новое меню, добавить объекты к нему и затем использовать [popupButton setMenu:newMenu], но нет. Меню всегда отображает только один объект на имя.

Но я знаю, что должно быть возможно, при попытке создать умный плей-лист в iTunes, Вы могли бы выбрать "Плей-лист" из левой кнопки всплывающего меню, "=" с середины, и правильный будет содержать пункты меню для каждого плей-листа в iTunes, ДАЖЕ ЕСЛИ у них будет тот же заголовок. Таким образом, как они делают это?

5
задан William S. Pear 23 February 2010 в 16:56
поделиться

3 ответа

У меня была точная проблема, и она была легко решена. Вместо использования методов NSPopUpButton , таких как –addItemWithTitle: для управления элементами кнопок, я добавил NSArrayController и вместо этого добавил элементы в контроллер массива. Затем я использовал привязки для привязки контроллера и всплывающей кнопки, и теперь он показывает элементы с одинаковыми названиями.

Для привязки:

  1. Добавьте NSArrayController в IB.
  2. Установите привязки NSPopUpButton для «Содержимое» в контроллер массива с ключом контроллера « », являющимся «упорядоченными объектами»
  3. привязки NSPopUpButton для «Выбранный индекс» к контроллеру массива с «Ключ контроллера» , являющийся «selectionIndex»
  4. {{1 }}
  5. [Необязательно] Выберите контроллер массива и установите Имя класса в атрибутах для любого класса, к которому относятся ваши элементы, например NSString или вы можете использовать стандартный NSMutableDictionary и добавить ключи в поле ниже, что, следовательно, позволяет вам обернуть ваши элементы в словаре и добавить разные ключи для того, что вы хотите показать во всплывающей кнопке и что вы хотите использовать в качестве фона. Чтобы указать, какой ключ словаря должен отображаться во всплывающей кнопке, снова перейдите к привязкам всплывающей кнопки для «Содержимое» и установите «Путь модального ключа» к ключу вы добавили в атрибут контроллера массива.
1
ответ дан 14 December 2019 в 04:36
поделиться

Хотя методы 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:)];
}
5
ответ дан 14 December 2019 в 04:36
поделиться

Вместо использования addItemWithTitle: вы можете создать NSMenuItem вручную и добавить его непосредственно в меню. Это позволит вам указать любое название, а также вставить его в любое место меню.

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

[newItem setTarget:self];
[[popupButton menu] addItem:newItem];
[newItem release];
2
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: