How to get touches when parent view has userInteractionEnabled set to NO in iOS How to get touches when parent view has userInteractionEnabled set to NO in iOS ios ios

How to get touches when parent view has userInteractionEnabled set to NO in iOS


To get a view to let touches pass-through but give its subviews handle touches, let userInteractionEnabled on that view to YES and, instead, use this snippet:

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {    id hitView = [super hitTest:point withEvent:event];    if (hitView == self) return nil;    else return hitView;}

Source: http://cocoaheads.tumblr.com/post/2130871776/ignore-touches-to-uiview-subclass-but-not-to-its


Setting the parent view's userInteractionEnabled property to NO also implicitly sets its subviews userInteractionEnabled properties to NO as well. I don't know of a way to get touch events to the subview using the approach that you have described, but perhaps you could create a view that simply overlays the views that you want users to interact with, but is not the parent of those views.


Swift solution- You need to have a custom view class for the parent view and add the following code to it. Please keep the parent view's user-interactions enabled.

I hope the following code will help you.

class MyCustomParentView: UIView {        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {        let hitView = super.hitTest(point, with: event)        if hitView == self {            return nil        } else {            return hitView        }    }}