NSStatusItem в NSStatusBar, метод выбора действия не отвечает

Сначала я объявляю элемент статуса:

var status_item: NSStatusItem?

Затем у меня есть функция, чтобы закрыть окно и добавить элемент статуса:

self.view.window?.orderOut(self)
//self.view.window?.close()

self.status_item = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength)
if let status_button = self.status_item?.button {
    status_button.image = NSImage(named: "StatusBarButtonImage")
    status_button.action = #selector(statusBar(sender:))
}

Вот мой метод селектора действий, который должен удалить элемент состояния и снова показать окно. Хотя он не вызывается при нажатии элемента строки состояния в строке состояния:

func statusBar(sender: AnyObject) {
    print("status bar clicked")
    self.status_item = nil
    self.view.window?.orderFront(nil)
}

Кто-нибудь знает, что я делаю неправильно?


person Heestand XYZ    schedule 16.05.2017    source источник


Ответы (1)


Установите цель кнопки на себя. Я предполагаю, что вы переместили код из AppDelegate в отдельный класс. Если это так, кнопка все еще получает сообщения от AppDelegate.

So...

if let status_button = self.status_item?.button {
    status_button.image = NSImage(named: "StatusBarButtonImage")
    status_button.action = #selector(statusBar(sender:))
    status_button.target = self //critical line
}
person laaksom    schedule 21.10.2017
comment
Не могли бы вы объяснить, почему метод будет искаться в AppDelegate, если цель не установлена? - person Pavel Lobodinský; 08.01.2019