diff --git a/packages/react-native-gesture-handler/apple/RNGestureHandler.mm b/packages/react-native-gesture-handler/apple/RNGestureHandler.mm index 12e64fe14f..065090a82a 100644 --- a/packages/react-native-gesture-handler/apple/RNGestureHandler.mm +++ b/packages/react-native-gesture-handler/apple/RNGestureHandler.mm @@ -596,7 +596,7 @@ - (void)sendEvent:(RNGestureHandlerStateChange *)event - (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(NSNumber *)reactTag { - if (_actionType == RNGestureHandlerActionTypeNativeDetector) { + if ([self usesNativeOrVirtualDetector]) { [self.emitter sendNativeTouchEventForGestureHandler:self withPointerType:_pointerType forHandlerType:[self eventHandlerType]]; diff --git a/packages/react-native-gesture-handler/apple/RNGestureHandlerPointerTracker.mm b/packages/react-native-gesture-handler/apple/RNGestureHandlerPointerTracker.mm index cd0d70155a..b2cb301fa1 100644 --- a/packages/react-native-gesture-handler/apple/RNGestureHandlerPointerTracker.mm +++ b/packages/react-native-gesture-handler/apple/RNGestureHandlerPointerTracker.mm @@ -296,10 +296,12 @@ - (void)sendEvent } // it may happen that the gesture recognizer is reset after it's been unbound from the view, - // it that recognizer tried to send event, the app would crash because the target of the event - // would be nil. - if (_gestureHandler.recognizer.view.reactTag == nil && - _gestureHandler.actionType != RNGestureHandlerActionTypeNativeDetector) { + // if that recognizer tried to send an event, the app would crash because the target of the event + // would be nil. Detector-attached handlers (native and virtual alike) don't route events by + // the view's reactTag — they dispatch through the detector view — so a nil tag is not an + // obstacle for them. The virtual recognizer's view has no reactTag at all, so without this + // exemption virtual handlers would never deliver touch events. + if (_gestureHandler.recognizer.view.reactTag == nil && ![_gestureHandler usesNativeOrVirtualDetector]) { return; }