【发布时间】:2011-12-06 10:52:53
【问题描述】:
我有一个使用NSStatusItem 的应用程序。在小屏幕上,状态栏没有太多空间。当用户切换到具有大量菜单项的应用程序时,我的状态项会被隐藏。有没有办法得到通知?
到目前为止我尝试了什么:
- 我检查了是否有任何
NSNotification被解雇:否 - 我检查了
statusView是否已从视图层次结构中删除:否 - 我查了
isHiddenOrHasHiddenAncestor:没有
这是我用来创建状态项的代码。
self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
MyStatusView *maView = [[[MyStatusView alloc] initWithFrame:CGRectMake(0, 0, 50, 22)] autorelease];
[statusItem setTitle:@"Ma Status Item"];
[statusItem setView:maView];
【问题讨论】:
-
你能测试它的 view.center 属性是否随着它离开屏幕而改变吗?您也许可以将 KVO 通知添加到 center 属性以建立一种回调,但我不知道这是否适用于 statusItem。
-
我还运行了一个计时器,记录相对于窗口的边界。没有改变...看起来 maView 在它自己的窗口中(NSWindow > NSNextStepFrame > maView)。将尝试查看是否已将其移出屏幕。
-
窗口边界仍在屏幕上。窗口可能被其他东西覆盖。虽然不知道如何检查..
-
我认为通过将状态项的窗口移动到背景中来隐藏状态项。我运行了一个计时器来检查 maView.window 顶部的窗口,例如 gist.github.com/1282781。现在有人告诉我当 Window 移到后台时是否有通知。
-
@stigi 你最终让它工作了吗?我似乎无法将通知 Dragoncharmer 列出来触发。
标签: objective-c macos cocoa appkit nsstatusitem