2010-11-10 101 views
1

我試圖檢測觸摸並在UITableView中保持手勢,同時保持跟蹤選擇了哪個單元。我需要能夠區分單元格上的正常水龍頭,並觸及持續時間超過X秒(可能是1秒左右)。主要的挑戰是我想要做到這一點,而無需繼承UITableViewCell,因爲這樣做會顯着減慢我的滾動速度。我認爲可能有一種方法可以使用NSTimer執行此操作,但似乎無法使其正常工作。使用touchesBegan:和touchesEnded:由於我沒有看到任何方式來跟蹤選中哪個單元,除非有辦法用這些方法做到這一點,所以定時器已經不存在了。任何幫助將不勝感激。檢測觸摸並按住UITableView

在此先感謝。

+2

對於OS 3.2或更高版本,你可以使用UILongPressGestureRecognizer。請參閱http://stackoverflow.com/questions/3924446/long-press-on-uitableview/3924965#3924965。 – Anna 2010-11-10 16:57:40

+0

太好了,非常感謝。 – Matt 2010-11-10 18:52:05

回答

6

UILongPressGestureRecognizer是爲這件事情做的。你創建一個並將其添加到UITableViewCell來處理長按。

+0

這是完美的,我沒有意識到這一點甚至存在,並沒有在文檔中看到它。非常感謝你! – Matt 2010-11-10 18:52:42

3

簡答題:子類和使用UILongPressGestureRecognizer

較長的回答:我相信你有UITableViewCell子類滾動問題的原因是reuseIdentifier不匹配,所以單元格不被重用。確保您在cellForRowAtIndexPath:方法中使用的reuseIdentifier與在Interface Builder中爲自定義UITableViewCell筆尖設置的reuseIdentifier相匹配。當我創建我的第一個子類並且匹配reuseIdentifier使一切變得更好時,我遇到了同樣的問題。 :)

至於使用UILongPressGestureRecognizer,看看爲UIGestureRecognizer S中的文檔,你應該能很快弄清楚。

UILongPressGestureRecognizer Documentation

UIGestureRecognizer Documentation

+0

謝謝,但我沒有使用任何東西的IB,一切都以編程方式創建。問題是已知的問題,在沒有自定義繪圖的情況下向單元添加多個子視圖會顯着減慢滾動速度。所以我最終只是避免了子類化,只是「減弱」我的表格視圖單元格和自定義繪圖/放置單元格片段而不添加子視圖,並且所有內容都能平滑滾動。 – Matt 2010-11-10 18:55:26

18

如果我們談論的細胞,你可能會想已經壓制了細胞的indexPath。

手勢識別添加到細胞,一個新的實例已經被分配之後:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)]; 
[cell addGestureRecognizer:longPress]; 
[longPress release]; 

手柄長按事件,並獲得indexPath:

-(void) handleLongPress: (UIGestureRecognizer *)longPress { 
    if (longPress.state==UIGestureRecognizerStateBegan) { 
     CGPoint pressPoint = [longPress locationInView:table]; 
     NSIndexPath *indexPath = [table indexPathForRowAtPoint:pressPoint]; 
    } 
} 
+0

將識別器添加到cell.contentView可能會稍微好一點,否則會干擾編輯模式。 – Hrissan 2013-06-07 21:41:09