【问题标题】:Being apprised of when NSStatusItem is hidden通知 NSStatusItem 何时隐藏
【发布时间】: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


【解决方案1】:

你很聪明地意识到当一个状态项被隐藏时,它的窗口会被移到后台。

现在您正在寻找的通知是: NSWindowDidResignKeyNotification (或 NSWindowDidResignMainNotification 取决于您的应用程序的上下文)

关于按键窗口和主窗口之间区别的清晰解释,请参阅this

【讨论】:

  • 这个答案不起作用,-1,当隐藏 NSStatusItem 时不会发送此类通知
  • -1:我第二个@Vervious - 这个答案比没用更糟糕,它让我浪费时间试图让它发挥作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多