当父视图在iOS中将userInteractionEnabled设置为NO时,如何进行触摸

sub*_*hap 41 touch uikit uiresponder ios

当父视图具有userInteractionEnabled = NO时,即使其userInteractionEnabled属性设置为YES,其子视图也不会接受触摸事件.

有没有办法在子视图中获取触摸事件?

Nik*_*kso 74

要获取视图以允许触摸传递但是为其子视图处理触摸,请将该视图上的userInteractionEnabled设置为YES,而是使用此代码段:

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

资料来源:http://cocoaheads.tumblr.com/post/2130871776/ignore-touches-to-uiview-subclass-but-not-to-its

  • 名称提案:CantTouchThisView.:) (2认同)

小智 6

Swift 解决方案 - 您需要为父视图创建一个自定义视图类,并向其中添加以下代码。请保持父视图的用户交互处于启用状态。

我希望下面的代码对您有所帮助。

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)