Выделение NSStatusItem приписанной строкой - PullRequest
7 голосов
/ 27 июля 2011

У меня есть NSStatusItem, и я использую для него приписанную строку, настройка такова:

[statusItem setAttributedTitle:as];

, где as - моя приписанная строка.Я использую его для выделения определенных частей предмета, когда выполняются определенные условия, окрашивая их по-разному.Так, например, мой элемент статуса может иметь красный текст и черный текст.

Теперь проблема в том, что когда я использую setAttributedTitle и затем нажимаю на элемент статуса, цвета не инвертируются какЯ хочу, чтобы они.Например, когда я использовал только setTitle, текст черный, когда не выделен, и становится белым, когда выбран.Теперь он просто сохраняет цвет, который я ему установил.

Есть ли способ сказать ему инвертировать цвета, когда он выбран?Если нет, как я могу этого достичь?Извините, я новичок в Objective-C.

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Похоже, единственный способ сделать это:

  • не устанавливать меню для statusItem с использованием setMenu:

  • Вместо этого используйте setAction:, измените цвет строки, отобразите меню, а затем измените цвет обратно

Например, используйте что-то вроде:

[statusItem setAction:@selector(statusItemClicked)];

И реализовать метод statusItemClicked следующим образом:

- (void) statusItemClicked {

  // change color of attributed string to its highlighted state here

  [statusItem popUpStatusItemMenu:statusItemMenu]; // show the menu
                                                   // which used to be set
                                                   // using setMenu:

  // change color of attributed string back its non-highlighted state here
}
2 голосов
/ 06 февраля 2013

вы можете реализовать следующие методы NSMenuDelegate:

- (void) menuWillOpen:(NSMenu *) aMenu {
  // use an attributed string to set the title to your highlighted color
}


- (void) menuDidClose:(NSMenu *) aMenu {
  // use an attributed string to set the title black
}

[statusItem setMenu:[self menu]];
[[self menu] setDelegate:self];
...