Rechercher quelle vue enfant a été exploitée lors de l’utilisation de UITapGestureRecognizer

Comment savoir sur quel vue enfant un événement s’est produit lors de l’utilisation de UIGestureRecognizers?

Selon la documentation:

Un dispositif de reconnaissance de mouvements opère sur les touches testées pour une vue spécifique et toutes les sous-vues de cette vue.

Pour autant que je puisse voir, la propriété ‘view’ est

La vue à laquelle la reconnaissance de geste est attachée.

qui sera la vue parent.

Cela trouvera la vue descendante la plus à l’intérieur de l’événement. (Notez que si cette vue enfant a des petits-enfants privés interactifs internes, ce code les trouvera également.)

UIView* view = gestureRecognizer.view; CGPoint loc = [gestureRecognizer locationInView:view]; UIView* subview = [view hitTest:loc withEvent:nil]; 

Dans Swift 2:

 let view = gestureRecognizer.view let loc = gestureRecognizer.locationInView(view) let subview = view?.hitTest(loc, withEvent: nil) // note: it is a `UIView?` 

Dans Swift 3:

 let view = gestureRecognizer.view let loc = gestureRecognizer.location(in: view) let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?` 

Pour les futurs utilisateurs … J’ai maintenant une meilleure option quand le monde n’utilise plus d’obj-c …

[sender view]

utilisez-le de cette façon:

 UITapGestureRecognizer * objTapGesture = [self createTapGestureOnView:myTextField]; [objTapGesture addTarget:self action:@selector(displayPickerView:)]; 

// ajoute ces méthodes

 -(void)displayPickerView:(UITapGestureRecognizer*)sender { UITextField *textField = (UITextField*)[sender view]; NSLog(@"tag= %ld", (long)textField.tag); } -(UITapGestureRecognizer*)createTapGestureOnView:(UIView *)view { view.userInteractionEnabled = YES; UITapGestureRecognizer * tapGesture = [[UITapGestureRecognizer alloc]init]; tapGesture.numberOfTapsRequired = 1; tapGesture.numberOfTouchesRequired = 1; [view addGestureRecognizer:tapGesture]; return tapGesture; }