3 votes

La sous-classe UIScrollView ne reçoit jamais le message touchesBegan pour les balayages.

J'essaie de faire en sorte qu'une vue défilante ne puisse défiler que dans une certaine région. Pour ce faire, je sous-classe UIScrollView et je surcharge touchesBegan (similaire à cette question ).

Voici mon code (assez simple).

.h

 @interface SuppressableScrollView : UIScrollView
 @end

.m

#import "SuppressableScrollView.h"

@implementation SuppressableScrollView

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

@end

touchesBegan n'est appelé que pour les touchers que UIScrollView ne consomme pas normalement (comme les tapotements). Une idée sur la façon d'intercepter toutes les touches ?

Je pense qu'il me manque un concept quelque part.

5voto

drekka Points 10020

J'ai récemment cherché quelque chose de similaire pour les UITableViews. UITableView est une extension de UIScrollView. En creusant à l'intérieur de celui-ci, j'ai découvert qu'il y a 4 reconnaissances de gestes attachées à l'UIScrollView pour capter les balayages et autres choses. Je vous suggère de vider les propriétés des reconnaissances de gestes pour voir si elles sont créées automatiquement (ce que je pense). Dans ce cas, la seule option à laquelle je pense est de les supprimer, mais alors la vue défilante ne répondra pas aux gestes.

Vous devez donc peut-être examiner ces reconnaissances de gestes et les délégués de reconnaissance de gestes que vous pouvez utiliser pour voir s'il existe un meilleur endroit où se connecter.

P.S. Les reconnaissances de gestes commenceront automatiquement à avaler les événements dès qu'elles reconnaîtront un geste en cours.

1voto

Nitin Alabur Points 3165

Si la taille du cadre est supérieure à celle du contenu, la méthode de démarrage des touches risque de ne pas fonctionner.

Puisque cela ne fonctionne que pour les tapotements, je pense que la taille du contenu de la vue défilante n'est pas définie correctement.

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