从MenuBar应用程序启动主应用程序

时间:2017-04-24 14:22:45

标签: swift cocoa menubar

我设法创建了一个应用程序,我不希望它在Dock上,直到用户点击MenuBar项目,然后启动应用程序,如果用户退出主应用程序,菜单栏物品仍然存在。

2 个答案:

答案 0 :(得分:0)

经过几天的研究,我终于想到了如何做到这一点。 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)应用程序时保留菜单栏:

func applicationShouldTerminate(sender: NSApplication) -> NSApplicationTerminateReply {
    // Cancel terminate if pref set

    self.window.close()
    NSApplication.sharedApplication().setActivationPolicy(NSApplicationActivationPolicy.Accessory)
    return NSApplicationTerminateReply.TerminateCancel
}

希望它有所帮助。

答案 1 :(得分:0)

在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)
    }
}