Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find which child view was tapped when using UITapGestureRecognizer

How do I know on which of the the child views an event occurred when using UIGestureRecognizers?

According to the documentation:

A gesture recognizer operates on touches hit-tested to a specific view and all of that view’s subviews.

As far as I can see, the 'view' property is

The view the gesture recognizer is attached to.

which will be the parent view.

like image 848
LK. Avatar asked May 07 '10 13:05

LK.


1 Answers

This will find the innermost descendant view at the event's location. (Note that if that child view has any interactive internal private grandchildren this code will find those too.)

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

In Swift 2:

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

In Swift 3:

let view = gestureRecognizer.view let loc = gestureRecognizer.location(in: view) let subview = view?.hitTest(loc, with: nil) // note: it is a `UIView?` 
like image 122
kennytm Avatar answered Oct 01 '22 13:10

kennytm