UIGestureRecognizer et UITableViewCell problème
Je joins une UISwipeGestureRecognizer
à un UITableViewCell
dans le cellForRowAtIndexPath:
méthode comme suit:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipe:)];
gesture.direction = UISwipeGestureRecognizerDirectionRight;
[cell.contentView addGestureRecognizer:gesture];
[gesture release];
}
return cell;
}
Cependant, la didSwipe
méthode est toujours appelé deux fois sur le succès de balayage. J'ai d'abord pensé que c'était parce que le geste commence et se termine, mais si je me déconnecte, le gestureRecognizer lui-même, ils sont tous les deux dans le "Fini" de l'état:
-(void)didSwipe:(UIGestureRecognizer *)gestureRecognizer {
NSLog(@"did swipe called %@", gestureRecognizer);
}
Console:
2011-01-05 12:57:43.478 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>
2011-01-05 12:57:43.480 App[20752:207] did swipe called <UISwipeGestureRecognizer: 0x5982fa0; state = Ended; view = <UITableViewCellContentView 0x5982c30>; target= <(action=didSwipe:, target=<RootViewController 0x5e3e080>)>; direction = right>
Vraiment, je ne sais pas vraiment pourquoi. J'ai essayé évidemment vérifier le Clos de l'état, mais qui n'est d'aucune aide, car ils viennent en "Terminé" de toute façon... des idées?
Vous devez vous connecter pour publier un commentaire.
Au lieu d'ajouter le geste de reconnaissance de la cellule directement, vous pouvez l'ajouter à la tableview dans
viewDidLoad
.Dans le
didSwipe
-Méthode, vous pouvez déterminer le touché IndexPath et de la cellule comme suit:Il collaborera avec l'app délégué
J'ai eu ce même problème et l'a résolu en cochant "Scrolling Activé" dans la table des attributs de vue.
Ma vue de la table n'a pas besoin de défilement, de sorte qu'il n'affecte pas l'application de toute autre manière, sauf que maintenant je ne suis pas le premier ne répond pas du robinet après un mouvement de balayage.
Ajoutant le geste à AwakeFromNib méthode fonctionne sans problèmes.