xcode - Swift on OS X. How to handle global mouse events? -


i new swift , xcode , have next problem:

i have simple cocoa swift application 1 counter (label). enter image description here

how handle mouse clicks in mac (in applications) , display in label?

i use xcode 7.3.1.

update 1. have alredy found it's monitoring events , addglobalmonitorforeventsmatchingmask:handler: function in cocoa, i'm not sure i'm on right way.

you correct using addglobalmonitorforeventsmatchingmask:handler:

a simple example might this:

appdelegate.swift

class appdelegate: nsobject, nsapplicationdelegate {      @iboutlet weak var window: nswindow!     @iboutlet var textlabel : nstextfield!     var eventhandler : globaleventmonitor?     var gecount : int = 0      func applicationdidfinishlaunching(anotification: nsnotification) {          eventhandler = globaleventmonitor(mask: .leftmousedownmask, handler: { (mouseevent: nsevent?) in         self.gecount += 1         self.textlabel.stringvalue = "global event monitor: \(self.gecount)"     })     eventhandler?.start()   } } 

globaleventmonitor.swift

public class globaleventmonitor {      private var monitor: anyobject?     private let mask: nseventmask     private let handler: nsevent? -> ()      public init(mask: nseventmask, handler: nsevent? -> ()) {         self.mask = mask         self.handler = handler     }      deinit {         stop()     }      public func start() {         monitor = nsevent.addglobalmonitorforeventsmatchingmask(mask, handler: handler)     }      public func stop() {         if monitor != nil {             nsevent.removemonitor(monitor!)             monitor = nil         }     } } 

events delivered asynchronously app , can observe event; cannot modify or otherwise prevent event being delivered original target application. key-related events may monitored if accessibility enabled or if application trusted accessibility access (see axisprocesstrusted).

note handler not called events sent own application.

in order capture events within app can either use addlocalmonitorforeventsmatchingmask:handler: or nsclickgesturerecognizer object.

if wanted combine global event monitor gesture recognizer object it's matter of implementing both objects class.


Comments