When the parent view has userInteractionEnabled=NO, its subviews will not accept touch events even if their userInteractionEnabled property is set to YES.
Is there a
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
}
}
}
A work around would be to disable the userinteraction of buttons etc to nil rather than disabling the user interaction of the whole parent view
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.
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