NSResponder似乎沒有鼠標雙擊事件。有沒有簡單的方法來獲得雙擊?在Cocoa OSX中捕捉雙擊
回答
mouseDown:
和mouseUp:
方法將NSEvent對象作爲參數提供有關點擊的信息,其中包括clickCount
。
一般應用程序會查看clickCount == 2 - [mouseUp:]以確定雙擊。
一個細化是跟蹤鼠標點擊 - [mouseDown:]的位置,並看到鼠標位置上的增量小(x和y均爲5分或更少)。
NSEvent
產生的mouseDown:
和mouseUp:
有一個屬性,稱爲clickCount
。檢查是否有兩個確定是否發生了雙擊。
樣品實施:
- (void)mouseDown:(NSEvent *)event {
if (event.clickCount == 2) {
NSLog(@"Double click!");
}
}
只需將在你的NSResponder
(如NSView
)的子類。
如果你需要同時處理 - 單擊和雙擊,你通常會做什麼。很明顯,如果最終結果是雙擊,你將不得不忽略單擊。 – jayarjo 2015-08-05 12:35:04
@jayarjo - 如果事實證明雙擊是必要的,那麼我不能想到任何單擊單擊操作都不應該完成的地方。在文本字段中,只需點擊一下鼠標即可將光標置於特定位置。雙擊突出顯示整個單詞。所以在單擊時移動光標是無害的。在RTS遊戲(至少暴雪的)中,一次點擊選擇一個單位,而雙擊則選擇該類型的所有單位。如果您想要雙擊完成與單擊操作完全不同的操作,您可能需要重新考慮整個用戶體驗。 – ArtOfWarfare 2015-08-05 14:46:30
普通clickCount
解決方案的問題在於雙擊僅被視爲兩次單擊。我的意思是你仍然得到單擊。如果你想對這一點擊做出不同的反應,你只需點擊點擊就能獲得一些東西。以下是我已經結束了(斯威夫特):
private var _doubleClickTimer: NSTimer?
// a way to ignore first click when listening for double click
override func mouseDown(theEvent: NSEvent) {
if theEvent.clickCount > 1 {
_doubleClickTimer!.invalidate()
onDoubleClick(theEvent)
} else if theEvent.clickCount == 1 { // can be 0 - if delay was big between down and up
_doubleClickTimer = NSTimer.scheduledTimerWithTimeInterval(
0.3, // NSEvent.doubleClickInterval() - too long
target: self,
selector: "onDoubleClickTimeout:",
userInfo: theEvent,
repeats: false
)
}
}
func onDoubleClickTimeout(timer: NSTimer) {
onClick(timer.userInfo as! NSEvent)
}
func onClick(theEvent: NSEvent) {
println("single")
}
func onDoubleClick(theEvent: NSEvent) {
println("double")
}
就個人而言,我檢查雙擊進入mouseUp事件功能:
- (void)mouseUp:(NSEvent *)theEvent
{
if ([theEvent clickCount] == 2)
{
CGPoint point = [theEvent locationInWindow];
NSLog(@"Double click on: %f, %f", point.x, point.y);
}
}
- 1. 很難捕獲UIButton子類上的雙擊。 (時間延遲捕捉雙擊)
- 2. 雙擊Cocoa中的NSTableView行?
- 3. Mac OSX中視頻捕捉的選擇?
- 4. 擊捕捉順序
- 5. 在單詞內部捕捉雙引號
- 6. Android:如何捕捉文本上的全局雙擊事件?
- 7. @捕捉不捕捉
- 8. 我無法點擊捕捉按鈕捕捉虛擬機映像
- 9. Cocoa/Xcode - OSX retrocompatibility
- 10. 在Android中捕獲雙擊圖片
- 11. 在捕捉
- 12. Swift cocoa Osx application imageviews
- 13. Cocoa/OSX標籤UI
- 14. 在ScreenSaver for Cocoa/OSX中播放QTMovie
- 15. 在TextArea中捕捉標籤
- 16. 在Silverlight中捕捉f5?
- 17. 在VBScript中捕捉事件
- 18. 在Swift中捕捉道路
- 19. 在iframe中捕捉javascript:window.close()
- 20. 在Django/Python中捕捉gaierror?
- 21. 在uitableviewcell中捕捉uiimageviewe touch
- 22. 在C#中捕捉按鍵#
- 23. 在javascript中捕捉phonegap GapViewClient.onReceivedError
- 24. 從地圖片段中捕獲雙擊
- 25. Flowplayer,Javascript,捕捉點擊事件?
- 26. 捕捉PDF超鏈接點擊從iframe
- 27. 捕捉鏈接點擊Asp.net MVC
- 28. 如何捕捉點擊Flash播放器?
- 29. 捕捉嵌套按鈕點擊
- 30. TinyMCE捕捉點擊按鈕事件
恕我直言,這是最有用的答案,因爲它也回答了隱是否對第二個mouseDown或第二個mouseUp作出反應的問題。當然,在某些情況下,偏離標準可能是有意義的。不幸的是,蘋果自己並不完全遵循一個標準(查找器和郵件在上,日曆在下)...... – fzwo 2014-05-06 10:34:54