2012-03-24 4 views
0

Я получаю NSMenuItem от Main Menu, с кодом здесь: Getting NSMenuItem of NSMenu tree by titleУстановка название на NSMenuItem, без эффекта

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

  • An 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

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

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

UPDATE *

(см комментарии) Мне потребовалось некоторое время, чтобы понять, почему даже мой тест не работает !!. Я назначил титул в 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]; 
+0

Это работает (я полагаю); но, как насчет вышеизложенного? Что я делаю не так? –

+0

что такое тег: PP_MENU_TAG_STATUSBAR] часть ?. У вас нет этого в имени метода! – markhunte

+0

Ну, хорошо ... Я признаю это - для одного конкретного суб-подзаголовка мне пришлось объявить тег для одного из пунктов меню ... поэтому я создал соответствующую функцию ('getItemWithPath: tag:' - то же, что и другой) + define 'PP_MENU_TAG_STATUSBAR' (= 1)). Pffff ... Это действительно становится слишком сложным ... Я начал думать, что я должен делать это по-своему ... –