2011-08-19 66 views
5

我一直在搜索Apple文檔,我發現有關雙擊的唯一功能只是返回了點擊之間的可接受時間,因此它被視爲雙擊。接收雙擊事件

有人可以告訴我一個雙擊事件的例子嗎?

+0

iOS或Mac OS X? – duskwuff

+1

@duskwuff OSX(查看標籤) – Sciguy77

+1

@duskwuff:另外,iOS沒有點擊。 –

回答

14

重寫NSResponder方法-mouseUp:並檢查提供的事件clickCount。如果clickCount == 2,那麼你正在尋找一個雙擊。如果它是1,那麼單擊一次。 0,然後他們在鼠標向下和鼠標之間等待了足夠長的時間,以至於系統認爲它不是點擊,只是區分了事件。

- (void)mouseUp:(NSEvent *)event 
{ 
    NSInteger clickCount = [event clickCount]; 
    if (2 == clickCount) [self handleDoubleClickEvent:event]; 
} 

這裏假定處理點擊的對象是響應者鏈的一部分。如果不是,則必須以另一種方式獲取事件,如繼承NSApplicationNSWindow,並覆蓋-sendEvent:以在相應事件繼續傳遞之前攔截相應事件。

+5

需要強調的是,這個答案中的「NSResponder」指的是Cocoa中的類(NSView,NSWindow和NSApplication從中繼承而來),而不是其後的名字。 –

2

還請注意,某些NSControlsetDoubleAction:,因此通過setDoubleAction:註冊的選擇器被髮送到目標。見

+0

事件(NSEvent對象)未傳遞給目標;一個動作消息被髮送到目標,但是,與通常的動作消息一樣,單個參數是發送消息的控件(表視圖或其他)。我相信你不是指NSEvent對象,但我想確保這一點很清楚。 –

+0

是的,這就是我的意思;我會重申它。謝謝。 – Yuji

+0

在我的情況下,我必須在10.10之前的操作系統上運行時爲NSTableView設置一個目標,但10.10在沒有設置目標的情況下工作正常(在我的情況下爲自己) – ghr