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

前端 未结 4 582
予麋鹿
予麋鹿 2020-11-28 08:38

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

相关标签:
4条回答
  • 2020-11-28 09:09

    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
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-28 09:12

    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

    0 讨论(0)
  • 2020-11-28 09:15

    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.

    0 讨论(0)
  • 2020-11-28 09:21

    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

    0 讨论(0)
提交回复
热议问题