2011-10-12 58 views
8

我有一個應用程序使用NSStatusItem。在小屏幕上,狀態欄中沒有太多空間。當用戶切換到具有很多菜單項的應用程序時,我的狀態項會被隱藏。有沒有辦法得到這個通知?被告知何時隱藏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]; 
+0

你可以測試它的view.center屬性是否隨着它離開屏幕而改變嗎?您可能可以將KVO通知添加到中心屬性以建立一種回調,但我不知道這是否適用於statusItem。 – Suz

+0

我也有一個定時器運行,記錄相對於窗口的邊界。沒有改變...它看起來像maView是在它自己的窗口(NSWindow> NSNextStepFrame> maView)。將嘗試看看這是否移出屏幕。 – stigi

+0

窗口邊界也仍然在屏幕上。該窗口可能被其他東西覆蓋。不知道如何檢查這個雖然.. – stigi

回答

1

你很聰明的認識到,當一個狀態項被隱藏時,它的窗口將被移動到背景中。

現在你正在尋找的通知是: NSWindowDidResignKeyNotification (或NSWindowDidResignMainNotification取決於應用程序的上下文中)

有關的重要窗口和主窗口之間的差別清晰的說明,請參閱this

+0

此答案無效,-1,隱藏NSStatusItem時不會發送此類通知 – Vervious

+0

-1:I second @Vervious - 此答案比無用的更糟糕,它讓我浪費自己的時間去努力工作。 – ArtOfWarfare