有没有一种编程方式可以突出状态栏项目?

5

我希望实现以下功能:
当我点击状态栏项 (NSStatusItem) 时,我想要无限期地突出显示它(没有菜单),并且当应用程序失去焦点时,我想停止突出显示它。

有没有办法做到这一点? 老实说,我找不到。


2
如果我看到一个应用程序这样做,我会认为它已经挂起了,或者至少没有使用标准的事件循环,在高亮和取消高亮之间。如果您想指示窗口可见,您应该更改您的项目图标。 - Peter Hosey
2个回答

2

虽然这个问题比较老,但我认为添加一个替代答案是值得的。

这种方法不会在应用程序失去焦点时自动取消高亮显示,但它允许您在不使用自定义视图(就像其他答案所需的那样)的情况下进行高亮显示:

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

您可以使用相同的方法手动取消高亮显示:
[statusItem.button setHighlighted:NO];

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


(Note: I got this answer from a similar question here.)
这句话是指作者在某个网站上找到了与自己遇到的问题类似的问题,并从中获取了答案。

2
您可以使用自定义视图来完成此操作,该视图会向状态栏项发送drawStatusBarBackgroundInRect:withHighlight:消息。
我认为没有办法不使用自定义视图来实现此操作,因为,正如我在评论中提到的那样,当用户没有将鼠标按下时保持项目高亮显示会看起来很糟糕。

1
事情是这样的:我有一个NSWindow(而不是popover),它将出现在状态栏项目的正下方(当单击时)。所以,我想模仿NSMenu的行为:我单击状态栏,窗口就会显示出来,项目就会被突出显示,当应用程序失去焦点时,窗口消失,项目恢复正常状态。 - Pedro Vieira
@PedroVieira:听起来很合理。如果我在做这个,我会像我在答案中描述的那样制作一个自定义视图。 - Peter Hosey
Pedro,我现在也遇到了完全相同的问题。你介意分享一下你是如何实现Peter的解决方案的吗?干杯。 - Laurent Crivello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接