Objective c 当NSStatusItem被隐藏时被通知

Objective c 当NSStatusItem被隐藏时被通知,objective-c,macos,cocoa,appkit,nsstatusitem,Objective C,Macos,Cocoa,Appkit,Nsstatusitem,我有一个使用NSStatusItem的应用程序。在小屏幕上,状态栏中没有太多空间。当用户切换到包含大量菜单项的应用程序时,我的状态项将隐藏。有没有办法得到通知 到目前为止,我尝试的是: 我检查了是否触发了任何NSNotification:否 我检查了statusView是否已从视图层次结构中删除:否 我选中了isHiddenOrHasHiddenAncestor:否 下面是我用来创建状态项的代码 self.statusItem = [[NSStatusBar systemStatusBar]

我有一个使用
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上面的窗口,如下所示。现在有人告诉我当一个窗口移到后台时是否有通知。@stigi你最终让它工作了吗?我似乎无法将dragoncharmer列表中的通知发送到fire。此答案不起作用,-1,当NSStatusItem被隐藏时,不会发送此类通知-1:I second@Vervious-此答案比无用更糟糕,它导致我浪费时间试图使其起作用。