【问题标题】:Is there any way to highlight the status bar item programmatically?有没有办法以编程方式突出显示状态栏项目?
【发布时间】:2015-01-01 20:19:06
【问题描述】:

我想执行以下操作:
当我单击状态栏项目 (NSStatusItem) 时,我想无限期地突出显示它(无菜单),当应用程序失去焦点时,我想停止突出显示它。

有什么办法吗?我找不到它,tbh。

【问题讨论】:

  • 如果我看到一个应用程序这样做,我会认为它在突出显示和取消突出显示之间被挂起,或者至少没有使用标准事件循环。如果你想表明你的窗口是可见的,你应该改变你的项目的图标。

标签: objective-c macos cocoa highlight nsstatusitem


【解决方案1】:

您可能可以使用sends the status item a drawStatusBarBackgroundInRect:withHighlight: message 的自定义视图来做到这一点。

我怀疑在没有自定义视图的情况下是否有任何方法可以做到这一点,因为正如我在对该问题的评论中提到的那样,当用户没有将鼠标放在它上面时保持该项目突出显示看起来很糟糕。

【讨论】:

  • 问题是:我有一个 NSWindow(没有弹出窗口),它将出现在状态栏项目的正下方(单击时)。所以,我想做的是模仿 NSMenu 行为:我点击状态栏,显示窗口并突出显示项目,当应用失去焦点时,窗口消失,项目进入正常状态。
  • @PedroVieira:听起来很合理。如果我这样做,我会制作一个自定义视图,就像我在回答中描述的那样。
  • 佩德罗,我现在面临着完全相同的问题。您介意分享一下您是如何实施 Peter 的解决方案的吗?干杯。
【解决方案2】:

老问题,但我认为值得添加这个替代答案。

当应用程序失去焦点时,这不会自动取消突出显示,但这允许您在不使用自定义视图的情况下突出显示(如 other answer 所要求的那样):

NSStatusItem *statusItem = [self getStatusItem];
[statusItem.button setHighlighted:YES];

您可以使用相同的方法手动取消突出显示它:

[statusItem.button setHighlighted:NO];

请注意,我从一个类似的问题 here 中得到了这个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多