Objective c 使用属性化字符串突出显示NSStatusItem

Objective c 使用属性化字符串突出显示NSStatusItem,objective-c,cocoa,nsstatusitem,Objective C,Cocoa,Nsstatusitem,我有一个NSStatusItem,我使用属性字符串,设置如下: [statusItem setAttributedTitle:as]; 其中,as是我的属性字符串。当通过不同的颜色满足某些条件时,我使用它来突出显示项目的某些部分。例如,我的状态项可以有一些红色文本和一些黑色文本 现在的问题是,当我使用setAttributeditle然后单击状态项时,颜色不会像我希望的那样反转。例如,当我仅使用setTitle时,未选中时文本为黑色,选中时文本变为白色。现在它只保留了我设置的颜色 有没有办法告

我有一个NSStatusItem,我使用属性字符串,设置如下:

[statusItem setAttributedTitle:as];
其中,
as
是我的属性字符串。当通过不同的颜色满足某些条件时,我使用它来突出显示项目的某些部分。例如,我的状态项可以有一些红色文本和一些黑色文本

现在的问题是,当我使用
setAttributeditle
然后单击状态项时,颜色不会像我希望的那样反转。例如,当我仅使用
setTitle
时,未选中时文本为黑色,选中时文本变为白色。现在它只保留了我设置的颜色


有没有办法告诉它在选择时反转颜色?如果没有,我如何才能做到这一点?对不起,我是Objective-C的初学者。

看来唯一的方法是:

  • 不要使用
    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
}

您可以实现以下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];

您是否尝试过调用
setHighlightMode:YES
?@jtbandes:YES,但这似乎只控制高亮显示时的蓝色背景。