2010-07-16 1 views
1

CODEétat de sélection d'arrière-plan UITableViewCell flips avant le geste se termine

J'ai un code qui ajoute un UILongPressGestureRecognizer geste de reconnaissance appelé _recognizer à une sous-classe d'un UITableViewCell appelé cell:

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

Le sélecteur -cellLongPressRecognized: simplement enregistre lorsque le geste se termine:

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

Ma console affiche un message de journal quand je tape, maintenir et libérer une cellule:

[MyViewController] -cellLongPressRecognized: gesture ended... 

Jusqu'à présent, si bon.

NUMÉRO

Le problème est que le fond de la cellule de table reste sélectionnée aussi longtemps que 1,0 secondes, la propriété _recognizer.minimumPressDuration.

Si je maintiens le doigt sur l'appareil pendant plus de 1,0 seconde, l'arrière-plan de la cellule revient du style de sélection UITableViewCellSelectionStyleBlue à son arrière-plan habituel, opaque et non sélectionné.

Pour vous assurer que seul le code spécifique à un geste est impliqué dans ce problème, j'ai désactivé -tableView:didSelectRowAtIndexPath: lors du test.

QUESTION

Comment garder l'arrière-plan sélectionné indéfiniment, retournée en arrière que lorsque le geste « long presse » se termine?

Répondre

3

j'ai changé mon état de test UIGestureRecognizerStateEnded-UIGestureRecognizerStateBegan et le geste est chronométré avec le changement d'état de sélection des cellules:

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

semble contre-intuitif de nommer l'événement de cette façon, mais cela semble fonctionner.

Questions connexes