2012-06-30 85 views
2

比方說,我有一個按鈕..如果他們都打電話給我的IBAction,我怎麼能區分單擊和雙擊?是否有辦法知道哪個事件引發了呼叫,或者設置了不同的操作,每種事件類型都有一個?如何知道哪個事件導致了對IBAction的呼叫?

+0

爲什麼不能定義兩個不同的IBActions,如果你需要告訴哪種事件產生了這個調用? – sergio

+0

是的..關鍵是如何?當我CTRL-拖動元素到頭文件它只是創建一個通用的動作,它不會問我的事件類型。我怎樣才能做到這一點? – luca

+0

@luca:操作是通用設計。如果單擊和雙擊應該做不同的事情,那麼他們應該發送不同的動作消息。對於一個按鈕,雙擊它應該不會發生與點擊兩次不同的操作,這就是爲什麼它沒有單獨的雙擊操作;應該有一個雙擊動作的自定義視圖應該有一個單獨的屬性,如[table view有的](http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/ NSTableView_Class /參考/#的reference.html // apple_ref/OCC/instm/NSTableView的/ setDoubleAction :)。 –

回答

3

編輯:

在可可,AFAIK,每個控制具有一種「固定」事件的它響應。要管理雙擊,您應該覆蓋方法mouseUpmouseDown,您將在其中獲得有關點擊次數的信息。

- (void)mouseUp:(NSEvent*)event { 
    NSInteger count = [event clickCount]; 
    <do_something_depending_on:count]; 
} 

OLD答:

您可以定義顯示的操作選項卡在Interface Builder的控件,然後連接合適的事件類型的控制器動作關聯到同一個控制多個IBActions。看看附件中的圖片,希望它更清晰。它顯示可用於按鈕的事件。

enter image description here

+0

雖然我無法在xcode上看到..我正在使用Mac應用程序,而不是iOS,根本沒有發送任何事件.. – luca

+0

抱歉有關誤解,但請檢查我的編輯。 – sergio

+0

Peter Hosey的答案是更好的答案,但是這也起作用。 – Vervious

0

如果我理解你的話,你應該爲一次點擊創建兩個不同的IBActions使用UIControlEventsTouchUpInside和兩次點擊UIControlEventsTouchDownRepeat(控件中的重複觸發事件;對於此事件,UITouch tapCount方法的值大於一個)

1

您可以ask the application for what event is currently being processed;對於鼠標點擊,這將包括click count

請注意,即使一個按鈕可能會因鼠標點擊以外的原因而觸發其操作,例如全鍵盤訪問(聚焦按鈕並按空格鍵)或VoiceOver(將VO光標置於按鈕上並使用按動作),所以不要認爲你的行爲是響應鼠標而被調用的。

相關問題