2017-10-04 10 views
-1

私はmacOSのためにswift 4で作業しています。このView Controllerの外をクリックするとView Controllerを終了したいと思います。ユーザが外部ビューコントローラをクリックしたかどうかを確認します

このコードでは、ユーザーがView Controllerをクリックしたかどうかを確認できます。ユーザーがView Controllerの外側をクリックした場合はどうすれば確認できますか?

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

と呼ばれていますか? –

+0

シートとして表示されるビューコントローラ。このシートビューコントローラの外側をクリックした場合、このシートビューコントローラを却下したいと思います。 – Ghost108

+0

@PhillipMills私はそれがアプリケーションの内側にあるべきであることをお勧めします –

答えて

-1

touchesEndedを使用します:イベントを使用してlocationInWindowを取得します。場所があなたのビューの範囲外にある場合は、それを却下してください。 iOSに関する同様の質問がここに表示されます。彼らはまだ解雇をキャンセルするビューにドラッグすることができます外に、私はいつもtouchedEnded好む

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

があるため、ユーザーが誤ってクリックした場合。

+2

が必要ですOSXソリューション – Ghost108

+0

なぜ私はtouchesBegan/touchesEndedを使用して、locationInWindow変数に渡されたNSEventをチェックしたと言っています... – MurderDev

1

NSEventは、彼らがディスパッチされる前にイベントをキャプチャしている... ...

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

と呼ばれる方法があります。

マウスの上または下のイベントを監視し、ブロックを使用して座標をビューの境界と比較するように依頼します。

編集:

除き、スウィフトに、それはあなたがあなたのアプリケーションのウィンドウ(S)の内部または完全にアプリ外で別のビューを意味するか...

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

関連する問題