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

时间:2011-07-27 02:31:12

标签: objective-c cocoa nsstatusitem

我有一个NSStatusItem,我使用了一个属性字符串,设置是这样的:

[statusItem setAttributedTitle:as];

其中as是我的属性字符串。我通过对它们进行不同着色来使用它来突出显示项目的某些部分。因此,我的状态项可以包含一些红色文本和一些黑色文本,例如。

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

有没有办法告诉它在选择时反转颜色?如果没有,我怎么能实现这个目标?对不起,我是Objective-C的初学者。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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];