J'ai quelques vues imbriquées comme ceci:Pourquoi l'événement tactile n'arrive-t-il pas à mon UIImageView?
D'abord, il y a un grand UIView. A l'intérieur, il y a un autre UIView. Et à l'intérieur, il y a une classe MyNiceButtons qui hérite de UIView. J'ai donc:
UIView> UIView> MyNiceButtons (= un UIView).
En détail, l'UIView crée une UIImageView et l'ajoute en tant que vue enfant à elle-même, ce qui représente un bouton graphique. Ainsi, dans la mise en œuvre de classe MyNiceButtons, j'ai ce code pour gérer un événement tactile sur l'image du bouton faux:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject]; // i just need single touches
// just to see which view is affected
UIView *tview = [touch view];
CGRect rect = tview.frame;
rect.origin.x = rect.origin.x + 20.0f;
tview.frame = rect;
[tview setBackgroundColor:[UIColor yellowColor]];
if ([touch view] == self.fakeButtonImageView) {
NSLog(@"touch on fake button detected");
}
}
Toutes les vues dans la hiérarchie ont userInteractionEnabled = OUI. Le toucher arrive à la première vue de la hiérarchie (le parent du parent).
UIView *tview = [touch view];
Ceci renvoie uniquement le parent du parent, mais pas le UIImageView sur lequel l'utilisateur s'est réellement appuyé.
Quel est le truc pour reconnaître si le toucher était sur le bouton UIImageView?
Est-MyNiceButtons une sous-classe de UIImageView ou un UIImageView –
Un UIView "A" contient une UIView "B", qui contient un UIImageView. UIView "B" a le code de détection tactile et demande si cela s'est passé sur UIImageView. – Thanks