Установка заголовка на NSMenuItem, без эффекта - PullRequest
0 голосов
/ 24 марта 2012

Я получаю NSMenuItem от Main Menu, с кодом здесь: Получение NSMenuItem дерева NSMenu по заголовку

Однако происходит нечто странное:

  • NSMenuItem, связанный с действием: при использовании свойства отправителя (NSMenuItem) и установке заголовка, работает .
  • НО: При получении элемента с функцией выше и установке заголовка заголовок NSMenuItem изменяется, но это изменение НЕ отражается в меню, к которому он принадлежит.

Что я делаю не так?(Я уверен, что это действительно глупо ...)

NSMenuItem* mi = [[core mainMenu] getItemWithPath:@"View" tag:PP_MENU_TAG_STATUSBAR];
[mi setTitle:@"newTitle"];
NSLog(@"mi : %@",[mi title]);

// mi changes, but no changes take effect in the mainMenu

1 Ответ

1 голос
/ 24 марта 2012

Я бы забыл Получение NSMenuItem дерева NSMenu по коду заголовка и просто подключил бы каждое меню в IB.

Затем используйте setTitle для него при необходимости

ОБНОВЛЕНИЕ *

(см. Комментарии) Мне потребовалось некоторое время, чтобы выяснить, почему даже мой тест не работал !!.Я поместил атрибутивный заголовок в IB.

enter image description here

Поэтому, когда позже я использовал setTitle .Свойство было установлено, но фактическое отображаемое меню было переопределено присвоенным заголовком.

Удаление присвоенного заголовка из IB.исправил это.И setTitle работает как положено.

Также я никогда раньше не использовал атрибутивный заголовок.И я просто вставил какой-то отформатированный цветной текст в заголовок IB.И пункт меню был одинаковым по цвету и шрифту.

Что я всегда хотел сделать, но думал, что это невозможно.

И сделать это программно легко.

 NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"newTestMenu"];
    [string addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0,string.length)];

    [_testMenu setAttributedTitle:string];
...