2017-10-04 3 views
-1

Ich arbeite mit Swift 4 für MacOS und ich möchte einen View-Controller entlassen, wenn ich außerhalb dieser Ansicht Controller geklickt habe.überprüfen, ob Benutzer außerhalb der Ansicht Controller

Mit diesem Code kann ich prüfen, ob der Benutzer in den View-Controller geklickt hat. Aber wie kann ich überprüfen, ob der Benutzer außerhalb des View-Controllers geklickt hat?

override func viewDidAppear() { 
    let gesture = NSClickGestureRecognizer(target: self, action: #selector(clicked)) 
    gesture.buttonMask = 0x1 // left mouse 
    gesture.numberOfClicksRequired = 1 
    self.view.addGestureRecognizer(gesture) 
} 


@objc func clicked() { 
    print("Hello world") 
} 
+0

Wollen Sie einen anderen Blick ins Innere Fenster Ihrer App (s) oder außerhalb der App ganz? –

+0

ein View-Controller, der als Blatt angezeigt wird. Wenn ich außerhalb dieses Blattansicht-Controllers geklickt habe, möchte ich diesen Blattansicht-Controller ablehnen – Ghost108

+0

@PhillipMills Ich schlage vor, es sollte in der App sein –

Antwort

-1

würde ich touchesEnded benutzen dann das Ereignis verwenden, um die locationInWindow zu greifen. Wenn der Standort außerhalb Ihrer Grenzen liegt, schließen Sie ihn. Eine ähnliche Frage für iOS kann hier gesehen werden.

IOS - How to hide a view by touching anywhere outside of it

Ich ziehe touchedEnded immer da, wenn ein Benutzer klickt versehentlich außerhalb sie nach wie vor der Ansicht ziehen die Entlassung abzubrechen.

+2

BEDARF OSX LÖSUNG – Ghost108

+0

Deshalb habe ich verwendet touchesBegan/touchesEnded und überprüfen Sie die NSEvent, die für die Variable locationInWindow übergeben wird ... – MurderDev

1

NSEvent hat eine Methode namens ...

+ (id)addLocalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(NSEvent * _Nullable (^)(NSEvent *))block;

... das fängt Ereignisse, bevor sie gesendet werden.

Bitten Sie darum, Mouse-Up- oder Mouse-Down-Ereignisse zu überwachen, und verwenden Sie den Block, um die Koordinaten mit den Grenzen Ihrer Ansicht zu vergleichen.

Edit:

Außer in Swift, es heißt ...

class func addLocalMonitorForEvents(matching mask: NSEventMask, handler block: @escaping (NSEvent) -> NSEvent?) -> Any?

Verwandte Themen