2010-07-16 37 views
1

CODE的UITableViewCell背景選擇狀態翻轉手勢結束之前

我有一些代碼,增加了所謂的_recognizer一個UILongPressGestureRecognizer手勢識別到的UITableViewCell稱爲cell一個子類:

... 
UILongPressGestureRecognizer *_recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPressRecognized:)]; 
_recognizer.allowableMovement = 20; 
_recognizer.minimumPressDuration = 1.0f; 
[[cell contentView] addGestureRecognizer:_recognizer]; 
[_recognizer release]; 
... 

-cellLongPressRecognized:選擇器簡單地日誌當手勢結束時:

- (void) cellLongPressRecognized:(id)_sender { 
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateEnded) 
     ALog(@"[MyViewController] -cellLongPressRecognized: gesture ended..."); 
} 

我的控制檯顯示一個日誌消息時,我點擊,保持和釋放細胞:

[MyViewController] -cellLongPressRecognized: gesture ended... 

到目前爲止,一切都很好。

發行

的問題是,表格單元格的背景撐唯一選擇,只要1.0秒的_recognizer.minimumPressDuration財產。

如果我將手指放在設備上的時間不超過1.0秒,單元格的背景會從UITableViewCellSelectionStyleBlue選擇樣式翻轉回其通常不透明的非選定背景。

爲了確保只有手勢特定的代碼與此問題有關,我在測試時禁用了-tableView:didSelectRowAtIndexPath:

問題

只有當「長按」手勢結束我怎麼無限期地選擇的背景,翻轉回來?

回答

3

我改變了我的測試條件從UIGestureRecognizerStateEndedUIGestureRecognizerStateBegan和手勢與定時小區選擇狀態變化:

- (void) cellLongPressRecognized:(id)_sender { 
    if (((UILongPressGestureRecognizer *)_sender).state == UIGestureRecognizerStateBegan) 
     ALog(@"[MyViewController] -cellLongPressRecognized: gesture began..."); 
} 

似乎違反直覺的命名事件這種方式,但似乎工作。