From 0b9eae94ec16307ce762ce59a0b3e6728e80dccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=BCtf=C3=BC=20=C3=96=C4=9ERET=C4=B0C=C4=B0?= Date: Tue, 27 Oct 2026 14:40:26 +0300 Subject: [PATCH] Fix onMagicTap never reaching iOS views on the New Architecture JS registers the magic tap listener under the prop name onMagicTap (BaseViewConfig.ios.js), but AccessibilityProps read the flag from onAccessibilityMagicTap, so the flag stayed false and RCTViewComponentView's accessibilityPerformMagicTap always returned NO. Read it from onMagicTap in both the constructor and setProp paths. --- .../react/renderer/components/view/AccessibilityProps.cpp | 4 ++-- .../components/view/tests/AccessibilityPropsTest.cpp | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp index b204a3fd3c58..5fd7ace1c60d 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp @@ -151,7 +151,7 @@ AccessibilityProps::AccessibilityProps( onAccessibilityMagicTap(convertRawProp( context, rawProps, - "onAccessibilityMagicTap", + "onMagicTap", sourceProps.onAccessibilityMagicTap, {})), onAccessibilityEscape(convertRawProp( @@ -228,7 +228,7 @@ void AccessibilityProps::setProp( RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityIgnoresInvertColors); RAW_SET_PROP_SWITCH_CASE_BASIC(accessibilityRespondsToUserInteraction); RAW_SET_PROP_SWITCH_CASE_BASIC(onAccessibilityTap); - RAW_SET_PROP_SWITCH_CASE_BASIC(onAccessibilityMagicTap); + RAW_SET_PROP_SWITCH_CASE(onAccessibilityMagicTap, "onMagicTap"); RAW_SET_PROP_SWITCH_CASE_BASIC(onAccessibilityEscape); RAW_SET_PROP_SWITCH_CASE_BASIC(onAccessibilityAction); RAW_SET_PROP_SWITCH_CASE_BASIC(importantForAccessibility); diff --git a/packages/react-native/ReactCommon/react/renderer/components/view/tests/AccessibilityPropsTest.cpp b/packages/react-native/ReactCommon/react/renderer/components/view/tests/AccessibilityPropsTest.cpp index b66d498b85d1..7284a0a26d1a 100644 --- a/packages/react-native/ReactCommon/react/renderer/components/view/tests/AccessibilityPropsTest.cpp +++ b/packages/react-native/ReactCommon/react/renderer/components/view/tests/AccessibilityPropsTest.cpp @@ -192,4 +192,12 @@ TEST(AccessibilityPropsTest, unset_selected_omits_selected_trait) { hasTrait(props.accessibilityTraits, AccessibilityTraits::Selected)); } +// JS registers the magic tap listener as `onMagicTap` (BaseViewConfig.ios.js), +// so that is the raw prop name the flag has to be read from. +TEST(AccessibilityPropsTest, reads_magic_tap_listener_from_on_magic_tap) { + auto props = parse(folly::dynamic::object("onMagicTap", true)); + + EXPECT_TRUE(props.onAccessibilityMagicTap); +} + } // namespace facebook::react