7

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

[statusItem setAttributedTitle:as];

as我的属性字符串在哪里。当满足某些条件时,我用它来突出显示项目的某些部分,方法是给它们涂上不同的颜色。例如,我的状态项可以有一些红色文本和一些黑色文本。

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

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

4

2 回答 2

4

看起来这样做的唯一方法是:

  • 不要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
}
于 2011-07-30T02:37:13.467 回答
2

您可以实现以下 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];
于 2013-02-06T14:48:03.987 回答