2016-01-21 68 views
6

我有一個應用程序出現在狀態欄項目上的彈出窗口。問題是,當您在全屏應用程序中單擊圖標時,然後將鼠標從菜單欄移​​開以單擊彈出窗口中的某些內容,菜單欄向上移動,彈出窗口也會移動。它很煩人。當我的彈出窗口打開時,如何防止菜單欄向下移動?

任何人都知道任何方式來解決這個問題?我試圖在彈出窗口中附加一個不可見的菜單,但是我無法使菜單看不見。

截圖爲清楚起見,惱人的部分是我揮一揮鼠標左右:

enter image description here

+0

順便說一句 - 你不僅會在全屏時遇到這個問題。在10.11版本中,可以始終自動隱藏菜單欄: http://www.tekrevue.com/tip/hide-menu-bar-os-x-el-el-capitan/ – cacau

+0

您可能想查看此主題,聽起來像一個乾淨的解決方案,您的問題: http://stackoverflow.com/questions/35008501/detect-if-menu-bar-is-hidden-or-visible – Jay

回答

1

彈出式窗口正在移動,因爲其父窗口是狀態項窗口,而當父窗口移動時,子窗口隨之移動。 (我調查此之前,我甚至不知道可可有父母和孩子的窗口。)我解決了這個代碼的問題顯示酥料餅後:

NSWindow *popoverWindow = self.popup.contentViewController.view.window; 
[popoverWindow.parentWindow removeChildWindow:popoverWindow]; 

現在,菜單欄依然向上移動,但至少彈出窗口保持在同一個地方。

+1

與你不擁有的窗戶混在一起..如果我是你的話,不會走下那條路。從經驗中尋求麻煩,並且容易與即將發佈的操作系統版本(甚至比已經測試過的操作系統相比更舊的版本)中斷。 – cacau

+0

@cacau有什麼更好的想法? – tbodt

0

超級哈克方法:

自定義窗口,一些超高窗位,使它會出現在菜單欄上,然後在新窗口中添加一個透明的自定義視圖,以根據需要捕捉和處理/阻止鼠標點擊。

或者:

獲取酥料餅的使用,顯示和跟蹤/處理NSWindowWillMoveNotification/NSWindowDidMoveNotification窗口實例。

+0

不完全是我的問題是,添加一個屏幕截圖澄清。 – tbodt

+0

啊,對!菜單欄隱藏時發送的任何通知?只要嘗試聽取任何內容並特別注意 中提到的內容即可。https://developer.apple.com/library/mac/documentation/General/Conceptual/MOSXAppProgrammingGuide/FullScreenApp/FullScreenApp。html – cacau

+0

如果有任何本地通知發送,它們將是全屏幕的程序。可能有分發通知,但我能做些什麼呢?隱藏彈出窗口?這將導致無法在全屏模式下使用彈出窗口。 – tbodt

1

要麼使用Carbon events或觀賞的東西發生在菜單欄(NSStatusBarWindow類型的窗口):

類型的

通知

  • NSWindowDidChangeOcclusionStateNotification
  • NSWindowDidMoveNotification
  • NSWindowWillCloseNotification
  • NSWindowDidCloseNotification

與類NSStatusBarWindow的對象應該給你足夠的信息顯示或隱藏菜單欄添加適當的處理。

+1

什麼是正確的處理?困難的部分沒有發現狀態項目何時移動,它阻止了彈出窗口的移動。 – tbodt

相關問題