2016-08-17 1 views
0

Je suis en train de créer une application de barre d'état (Swift 3) et je souhaite appeler différentes actions selon que l'utilisateur a cliqué à gauche ou à droite. Voici ce que j'ai jusqu'à présent:Swift: Reconnaître les événements de clic gauche et droit sur 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") 
} 

Ma fonction n'est pas appelée et je n'ai pas pu trouver notre pourquoi. J'apprécie toute aide!

Répondre

3

Avez-vous essayé:

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

voir ensuite quel bouton de souris a été pressé dans la fonction doSomeAction()?

Il ressemblera à quelque chose comme ...

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

cela fonctionne effectivement, mais semble seulement comme '.rightMouseUp', pas '.rightMouseDown' – joe

+0

Avez-vous également modifié la ligne' button.sendAction'? –

+0

doh! changé dans le 'sendAction', pas dans l'instruction! fonctionne très bien, merci x) – joe

1

Mise à jour: SWIFT 4

J'ai mis à jour (Craig Francis) réponse

func doSomeAction(sender: NSStatusItem) { 

    let event = NSApp.currentEvent! 

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

Pouvez-vous ajouter un peu plus sur pourquoi ce code fonctionne et ce qu'il fait pour résoudre le problème? – Daniel