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; }