Обнаружение событий левого и правого клика на NSStatusItem (Swift)

Я создаю приложение в строке состояния и хочу вызывать различные действия в зависимости от того, нажал ли пользователь влево или вправо. Вот что у меня так далеко:

var statusItem = NSStatusBar.system().statusItem(withLength: -1)
statusItem.action = #selector(AppDelegate.doSomeAction(sender:))

let leftClick = NSEventMask.leftMouseDown
let rightClick = NSEventMask.rightMouseDown

statusItem.button?.sendAction(on: leftClick)
statusItem.button?.sendAction(on: rightClick)

func doSomeAction(sender: NSStatusItem) {
    print("hello world")
}

Моя функция не вызывается, и я не могу найти наш почему. Я ценю любую помощь!

2 ответа

Ты пытался:

button.sendAction(on: [.leftMouseUp, .rightMouseUp])

Затем, увидев, какая кнопка мыши была нажата в doSomeAction() функционировать?

Так это будет выглядеть примерно так...

let statusItem = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength)

func applicationDidFinishLaunching(_ aNotification: Notification) {

    if let button = statusItem.button {
        button.action = #selector(self.doSomeAction(sender:))
        button.sendAction(on: [.leftMouseUp, .rightMouseUp])
    }

}

func doSomeAction(sender: NSStatusItem) {

    let event = NSApp.currentEvent!

    if event.type == NSEventType.rightMouseUp {
        // Right button click
    } else {
        // Left button click
    }

}

https://github.com/craigfrancis/datetime/blob/master/xcode/DateTime/AppDelegate.swift

Обновлено: SWIFT 4

Я обновил (Крейг Фрэнсис) ответ

func doSomeAction(sender: NSStatusItem) {

    let event = NSApp.currentEvent!

    if event.type == NSEvent.EventType.rightMouseUp{
        // Right button click
    } else {
        // Left button click
    }
Другие вопросы по тегам