Swift: NSStatusItem остается выделенным после щелчка правой кнопкой мыши

Я создал NSStatusBarItem и всплывающее окно (программно сгенерированное) NSMenu при щелчке правой кнопкой мыши:

let statusBarItem = NSStatusBar.system().statusItem(withLength: -1)
statusBarItem.action = #selector(AppDelegate.statusBarItemAction(sender:))

let menu = NSMenu()
var menuItem = NSMenuItem()
menuItem.action = #selector(AppDelegate.customItemAction)
menu.addItem(menuItem)

func statusBarItemAction(sender: NSStatusItem) {
    let mouseEvent = NSEvent.pressedMouseButtons()
    if mouseEvent == 2 {
        // right click
        lxStatusBarItem.popUpMenu(menu)
    }
}

func customItemAction() {
    // do something
}

Все работает нормально, за исключением того, что statusBarItem остается выделенным после вызова customItemAction:

введите описание изображения здесь

Как я могу это решить?


person ixany    schedule 15.10.2016    source источник


Ответы (1)


Я обнаружил, что настройка statusItem.button?.isHighlighted = false помогла убрать выделение. В вашем случае это будет выглядеть так:

func customItemAction() {
    // do something
    statusBarItem.button?.isHighlighted = false
    ...
}
person Thomas Verbeek    schedule 29.04.2017
comment
Это удаляет выделение, но если вы откроете NSWindow, вам все равно придется щелкнуть его один раз, прежде чем он станет ключевым, несмотря на makeKeyAndOrderFront. - person John; 30.05.2018
comment
@John, есть ли способ обойти NSWindow, чтобы сделать его ключевым? Я пробовал несколько способов (включая makeKeyAndOrderFront), и я не могу заставить его работать, включая имитацию щелчка левой кнопкой мыши по окну, чтобы сделать его ключевым. - person Mike Manzo; 10.03.2019
comment
@MikeManzo Я еще не нашел решения. - person John; 11.03.2019
comment
@John @MikeManzo Я столкнулся с той же проблемой. Настройка sendAction для работы только с событиями поднятия мыши сработала для меня как обходной путь. - person Ryan; 08.01.2020