【问题标题】:Highlighting NSStatusItem with attributed string使用属性字符串突出显示 NSStatusItem
【发布时间】:2013-02-06 22:48:03
【问题描述】:

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

[statusItem setAttributedTitle:as];

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

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

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

【问题讨论】:

  • 你试过打电话给setHighlightMode:YES吗?
  • @jtbandes:是的,但这似乎只在突出显示时控制蓝色背景。

标签: objective-c cocoa nsstatusitem


【解决方案1】:

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

  • 不要使用setMenu:statusItem设置菜单

  • 改为使用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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2016-03-26
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多