diff --git a/React/Fabric/RCTSurfaceTouchHandler.mm b/React/Fabric/RCTSurfaceTouchHandler.mm index 387908ccf6d..04e09ddfd57 100644 --- a/React/Fabric/RCTSurfaceTouchHandler.mm +++ b/React/Fabric/RCTSurfaceTouchHandler.mm @@ -102,18 +102,21 @@ static void UpdateActiveTouchWithUITouch( static ActiveTouch CreateTouchWithUITouch(UITouch *uiTouch, UIView *rootComponentView, CGPoint rootViewOriginOffset) { - UIView *componentView = uiTouch.view; - ActiveTouch activeTouch = {}; - if ([componentView respondsToSelector:@selector(touchEventEmitterAtPoint:)]) { - activeTouch.eventEmitter = [(id)componentView - touchEventEmitterAtPoint:[uiTouch locationInView:componentView]]; - activeTouch.touch.target = (Tag)componentView.tag; + // Find closest Fabric-managed touchable view + UIView *componentView = uiTouch.view; + while (componentView) { + if ([componentView respondsToSelector:@selector(touchEventEmitterAtPoint:)]) { + activeTouch.eventEmitter = [(id)componentView + touchEventEmitterAtPoint:[uiTouch locationInView:componentView]]; + activeTouch.touch.target = (Tag)componentView.tag; + activeTouch.componentView = componentView; + break; + } + componentView = componentView.superview; } - activeTouch.componentView = componentView; - UpdateActiveTouchWithUITouch(activeTouch, uiTouch, rootComponentView, rootViewOriginOffset); return activeTouch; }