56 votes

Détection du défilement de UITableView

J'ai sous-classé UITableView (en tant que KRTableView) et implémenté les quatre méthodes tactiles (touchesBegan, touchesEnded, touchesMoved et touchesCancelled) afin de pouvoir détecter quand un événement tactile est traité sur un UITableView. Essentiellement, ce que je dois détecter, c'est le moment où l'UITableView défile vers le haut ou vers le bas.

Cependant, la sous-classification de UITableView et la création des méthodes ci-dessus ne détectent que le défilement ou le mouvement du doigt à l'intérieur d'une UITableViewCell, et non sur l'ensemble de UITableView.

Dès que mon doigt est déplacé sur la cellule suivante, les événements tactiles ne font plus rien.

C'est ainsi que je sous-classe UITableView :

#import "KRTableView.h"

@implementation KRTableView

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];   
    NSLog(@"touches began...");
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesMoved:touches withEvent:event];
  NSLog(@"touchesMoved occured");   
}

- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent *)event {
    [super touchesCancelled:touches withEvent:event];
  NSLog(@"touchesCancelled occured");   
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
  [super touchesEnded:touches withEvent:event];
  NSLog(@"A tap was detected on KRTableView");
}

@end

Comment puis-je détecter si le UITableView défile vers le haut ou vers le bas ?

143voto

NSResponder Points 14459

Vous n'avez pas besoin d'intercepter les méthodes d'événements. Consultez les documents relatifs à la méthode UIScrollViewDelegate et mettre en œuvre le protocole -scrollViewDidScroll: o -scrollViewWillBeginDragging: les méthodes appropriées à votre situation.

38voto

jake_hetfield Points 2344

Je voudrais ajouter ce qui suit :

Si vous travaillez avec un UITableView il est probable que vous mettiez déjà en œuvre la UITableViewDelegate pour remplir le tableau avec des données.

Le protocole UITableViewDelegate est conforme à UIScrollViewDelegate, de sorte que tout ce que vous devez faire est de mettre en œuvre les méthodes -scrollViewWillBeginDragging y -scrollViewDidScroll directement dans votre implémentation de UITableViewDelegate et ils seront appelés automatiquement si la classe d'implémentation est définie comme délégué de votre UITableView.

Si vous souhaitez également intercepter les clics dans votre tableau et pas seulement le glissement et le défilement, vous pouvez étendre et implémenter votre propre UITableViewCell et utiliser les méthodes touchesBegan : dans celle-ci. En combinant ces deux méthodes, vous devriez être en mesure de faire la plupart des choses dont vous avez besoin lorsque l'utilisateur interagit avec l'UITableView.

1voto

Nassif Points 140

C'est mon erreur, j'ai essayé d'appeler la méthode avant de recharger le tableau. Le code suivant m'a aidé à résoudre ce problème.

[mytableview reloadData];

[mytableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:btn.tag-1] atScrollPosition:UITableViewScrollPositionTop animated:YES];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X