Мне удалось создать приложение, и я не хочу, чтобы оно находилось в доке, пока пользователь не щелкнет элемент меню, затем он запустит приложение, и если пользователь выйдет из основного приложения, элемент меню все равно останется.

1
styl3r 24 Апр 2017 в 17:22

2 ответа

Лучший ответ

Хорошо, после нескольких дней исследований, я наконец понял, как это сделать. 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
}

Надеюсь, это кому-нибудь поможет.

0
styl3r 27 Апр 2017 в 10:59

В 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)
    }
}
0
pkamb 4 Дек 2019 в 03:49
43590682