Détection de Tap & Hold dans les cellules UITableView

Comment détecter un tapotement sur un UITableViewCell ?

Dans iOS 3.2 ou version ultérieure, vous pouvez utiliser UILongPressGestureRecognizer

Voici le code extrait directement de mon application. Vous devez append ces methods (et un membre _cancelTouches boolean) à une class dérivée de UITableViewCell.

 -(void) tapNHoldFired { self->_cancelTouches = YES; // DO WHATEVER YOU LIKE HERE!!! } -(void) cancelTapNHold { [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tapNHoldFired) object:nil]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { self->_cancelTouches = NO; [super touchesBegan:touches withEvent:event]; [self performSelector:@selector(tapNHoldFired) withObject:nil afterDelay:.7]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self cancelTapNHold]; if (self->_cancelTouches) return; [super touchesEnded:touches withEvent:event]; } - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ [self cancelTapNHold]; [super touchesMoved:touches withEvent:event]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [self cancelTapNHold]; [super touchesCancelled:touches withEvent:event]; } 
 //Add gesture to a method where the view is being created. In this example long tap is added to tile (a subclass of UIView): // Add long tap for the main tiles UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longTap:)]; [tile addGestureRecognizer:longPressGesture]; [longPressGesture release]; -(void) longTap:(UILongPressGestureRecognizer *)gestureRecognizer{ NSLog(@"gestureRecognizer= %@",gestureRecognizer); if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) { NSLog(@"longTap began"); } } 

Vous devriez probablement gérer l'événement UIControlTouchDown et en fonction de ce que vous entendez par "hold", triggersz un NSTimer qui countra un intervalle depuis que vous avez initié le toucher et invalider lors du triggersment ou du relâchement du toucher (events UIControlTouchUpInside et UIControlTouchUpOutside ). Lorsque la timer se triggers, vous avez votre "tap & hold" détecté.