Swift 从菜单栏应用程序启动主应用程序

Swift 从菜单栏应用程序启动主应用程序,swift,cocoa,menubar,Swift,Cocoa,Menubar,我已经成功创建了一个应用程序,我不希望它出现在Dock上,直到用户单击菜单栏项,然后它启动应用程序,如果用户退出主应用程序,菜单栏项仍然保留。好的,经过几天的研究,我终于想出了如何做。 Swift 2.3 func toggleApp(sender: AnyObject) { if self.window!.visible { self.window.orderOut(window) NSApplication.sharedApplication().se

我已经成功创建了一个应用程序,我不希望它出现在Dock上,直到用户单击菜单栏项,然后它启动应用程序,如果用户退出主应用程序,菜单栏项仍然保留。

好的,经过几天的研究,我终于想出了如何做。 Swift 2.3

func toggleApp(sender: AnyObject) {
    if self.window!.visible {
        self.window.orderOut(window)
        NSApplication.sharedApplication().setActivationPolicy(NSApplicationActivationPolicy.Accessory)

    } else {
        NSApplication.sharedApplication().setActivationPolicy(NSApplicationActivationPolicy.Regular)
        self.window!.makeKeyAndOrderFront(nil)
        NSApp.activateIgnoringOtherApps(true)
    }
}
这用于在用户退出(CMD Q)应用程序时保留菜单栏:


希望它能帮助别人。

好的,经过几天的研究,我终于想出了办法。 Swift 2.3

func toggleApp(sender: AnyObject) {
    if self.window!.visible {
        self.window.orderOut(window)
        NSApplication.sharedApplication().setActivationPolicy(NSApplicationActivationPolicy.Accessory)

    } else {
        NSApplication.sharedApplication().setActivationPolicy(NSApplicationActivationPolicy.Regular)
        self.window!.makeKeyAndOrderFront(nil)
        NSApp.activateIgnoringOtherApps(true)
    }
}
这用于在用户退出(CMD Q)应用程序时保留菜单栏:

希望它能帮助别人。

在Swift 5中:

func toggleApp(sender: AnyObject) {
    if self.window.visible {
        self.window.orderOut(window)
        NSApplication.shared.setActivationPolicy(NSApplication.ActivationPolicy.accessory)

    } else {
        NSApplication.shared.setActivationPolicy(NSApplication.ActivationPolicy.regular)
        self.window!.makeKeyAndOrderFront(nil)
        NSApp.activate(ignoringOtherApps: true)
    }
}
在Swift 5中:

func toggleApp(sender: AnyObject) {
    if self.window.visible {
        self.window.orderOut(window)
        NSApplication.shared.setActivationPolicy(NSApplication.ActivationPolicy.accessory)

    } else {
        NSApplication.shared.setActivationPolicy(NSApplication.ActivationPolicy.regular)
        self.window!.makeKeyAndOrderFront(nil)
        NSApp.activate(ignoringOtherApps: true)
    }
}