2016-08-17 1 views
0

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

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

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

ответ

3

Вы пробовали:

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

+0

это действительно работает, но, похоже, похоже на '.rightMouseUp', а не '.rightMouseDown' – joe

+0

Вы также изменили строку' button.sendAction'? –

+0

doh! изменено в 'sendAction', а не в заявлении! хорошо работает, спасибо x) – joe

1

Обновлено: СВИФТ 4

Я обновил (Craig Francis) ответ

func doSomeAction(sender: NSStatusItem) { 

    let event = NSApp.currentEvent! 

    if event.type == NSEvent.EventType.rightMouseUp{ 
     // Right button click 
    } else { 
     // Left button click 
    } 
+0

Можете ли вы добавить немного больше о том, почему этот код работает и что он делает для решения проблемы? – Daniel