Highlighting NSStatusItem with attributed string

纵饮孤独 提交于 2021-01-27 04:14:31

问题


I have a NSStatusItem, and I use an attributed string for it, setting is as such:

[statusItem setAttributedTitle:as];

where as is my attributed string. I use it to highlight certain parts of the item when certain conditions are met by coloring them differently. So my status item can have some red text and some black text, for example.

Now the problem is, when I use setAttributedTitle and then click on the status item, the colors don't get inverted as I want them to. For instance, when I used just setTitle, the text is black when not selected and changes to white when selected. Now it just keeps the color I set it to.

Is there a way to tell it to invert colors when it's selected? If not, how can I achieve this? Sorry, I'm a beginner in Objective-C.


回答1:


Looks like the only way to do this is:

  • do not set a menu for the statusItem using setMenu:

  • instead, use setAction:, change the color of the string, show the menu, and then change the color back

For instance, use something like:

[statusItem setAction:@selector(statusItemClicked)];

And implement the statusItemClicked method like this:

- (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:


you can implement the following NSMenuDelegate methods:

- (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];


来源:https://stackoverflow.com/questions/6838856/highlighting-nsstatusitem-with-attributed-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!