2017-10-04 81 views
-1

我正在使用swift 4 for macOS,我想關閉視圖控制器,如果我在此視圖控制器之外單擊。檢查用戶是否點擊了外部視圖控制器

有了這段代碼,我可以檢查,如果用戶點擊了視圖控制器。但是如果用戶點擊了視圖控制器外部,我該如何檢查?

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

你的意思是你的應用程序的窗口(S)內有不同的看法,或完全在應用之外? –

+0

一個視圖控制器,它將顯示爲一張圖紙。如果我點擊這個圖表視圖控制器的外部,我想關閉這個圖表視圖控制器 – Ghost108

+0

@PhillipMills我建議它應該在應用程序內 –

回答

-1

我會用touchesEnded:然後使用事件搶locationInWindow。如果該位置超出了您的視野範圍,請將其解除。 iOS的類似問題可以在這裏看到。

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

我總是喜歡touchedEnded因爲如果用戶不小心點擊之外,他們還可以拖動到視圖取消解僱。

+2

需要OSX解決方案 – Ghost108

+0

這就是爲什麼我說使用touchesBegan/touchesEnded並檢查傳入的locationInWindow變量的NSEvent ... – MurderDev

1

NSEvent有一個名爲方法...

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

...捕獲的事件,他們被派遣之前。

要求監視鼠標或向下鼠標事件,並使用該塊將座標與視圖的邊界進行比較。

編輯:

除了在斯威夫特,這就是所謂的...

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

相關問題