我有一个状态栏应用程序,运行在菜单栏中。因此我在info.plst
文件中将Application is agent (UIElement)
设置为true
。这样就不会出现我的应用程序的Dock图标和菜单栏。
然而,我还有一个偏好窗口,用户可以从状态栏菜单中打开。这是我打开它的方法:
if (!NSApp.setActivationPolicy(.regular)) {
print("unable to set regular activation policy")
}
NSApp.activate(ignoringOtherApps: true)
if let window = preferencesWindowController.window {
window.makeKeyAndOrderFront(nil)
}
窗口按预期显示,但应用程序的主菜单栏(如文件,编辑等)未显示。只有当我点击另一个应用程序并回到我的应用程序时,菜单栏才会显示。
我注意到,如果我将 info.plist
中的值更改为 false
,并在 applicationDidFinishLaunching()
中使用 NSApp.setActivationPolicy(.accessory)
,结果相同。但是,如果我在 applicationDidFinishLaunching()
调用后几毫秒内使用计时器调用 NSApp.setActivationPolicy(.accessory)
,它可以正常工作,并且主菜单栏按预期显示。但是,这样做的副作用是应用程序图标会在几秒钟内弹出到 dock 中(直到计时器被触发),这不是良好的用户体验。
有没有人有什么其他建议?当我切换活动应用程序时,发生了什么事情,而我在代码中没有做的事情?
我正在使用 macOS 10.12.2 (16C67)上的 Version 8.2.1 (8C1002)。
谢谢!