2010-09-17 2 views
0

Fondamentalement ...Parent UIScrollView détecter les touches de l'enfant UIView

J'ai une sous-classe de UIScrollView que vous pouvez ajouter une cible et un sélecteur trop, qui se déclenché si un événement tactile est détecté dans la vue. J'utilise la vue de défilement comme une galerie d'images, et la touche dans la vue de défilement est utilisée pour fondre les composants HUD (UIToolbar, etc.):

@implementation TouchableScrollView 

- (void)addTarget:(id)_target withAction:(SEL)_action 
{ 
    target = _target; 
    action = _action; 
    shouldRun = NO; 
} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    shouldRun = YES; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    shouldRun = NO; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if(shouldRun) 
    { 
     shouldRun = NO; 
     [target performSelector:action]; 
    } 
} 

@end 

Je puis une autre coutume UIView ajouté en tant que sous-vue à ce qui a le jeu suivant (tous les deux que j'ai joué avec):

self.userInteractionEnabled = YES; 
self.exclusiveTouch = YES; 

et utilise les éléments suivants pour déclencher une animation:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

le problème est même lorsque le UIView personnalisé détecte le toucher et répond (en se retournant), le sélecteur UIScrollView est également déclenché, provoquant la disparition de tout.

S'il vous plaît aider, je suis totalement coincé ?!

Répondre

0

mieux utiliser dans la classe ScrollView personnalisée

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
if (!self.dragging) { [self.nextResponder touchesEnded: touches withEvent:event]; }
[super touchesEnded: touches withEvent: event];

self.nextResponder est ScrollView subviews. donc l'événement autre que le glissement (défilement) sera géré par votre viewController principal. dans la commande principale View hériter de la méthode d'événement tactile. vous pouvez vérifier l'événement tactile pour une vue particulière ou une vue d'image.

+0

Ok, j'ai réussi à résoudre cela d'une manière plutôt hacky (boooooo). J'ai juste ajouté une propriété à la sous-classe UIScrollView afin que vous puissiez définir shouldRun sur NO, ce qui signifie qu'il ne déclenchera jamais l'événement tactile UIScrollView lorsque l'autre vue enfant est touchée :) –

Questions connexes