我有一個狀態欄應用程序,它在菜單欄中運行。因此,我在info.plst
中將Application is agent (UIElement)
設置爲true
。這導致我的應用程序沒有停靠圖標和菜單欄。macOS菜單欄應用程序:主菜單未顯示
但是,我也有一個首選窗口,用戶可以從狀態欄菜單打開。這是我如何打開它:
if (!NSApp.setActivationPolicy(.regular)) {
print("unable to set regular activation policy")
}
NSApp.activate(ignoringOtherApps: true)
if let window = preferencesWindowController.window {
window.makeKeyAndOrderFront(nil)
}
窗口顯示爲預期,但應用程序與文件,編輯等主菜單欄,顯示不出來。只有當我點擊另一個應用程序並回到我的應用程序時,菜單欄纔會顯示。
我注意到,如果我在info.plst
值更改爲false
和applicationDidFinishLaunching()
使用NSApp.setActivationPolicy(.accessory)
,它具有相同的效果。但是,如果在applicationDidFinishLaunching()
被調用後的幾毫秒時間內,我用NSApp.setActivationPolicy(.accessory)
調用了一個定時器,它會起作用,主菜單按預期顯示。然而,這具有副作用,應用程序圖標在碼頭中彈出幾秒鐘(直到定時器被觸發),這不是一個好的用戶體驗。
有沒有人有一個想法我還能嘗試什麼?當我切換活動的應用程序時發生了什麼,我沒有在代碼中做什麼?
我使用在MacOS 10.12.2版本8.2.1(8C1002)(16C67)
謝謝!
「窗口按預期顯示」我認爲窗口也成爲第一響應者,並且看起來不像背景或其他東西。正確? – idmean
這是正確的。 – Daniel
我遇到了這個問題以及我的應用程序。你不是一個人 :) – Bob