Skip to content

fix(a11y): add iOS VoiceOver support to picker and Done button#22

Open
TaduJR wants to merge 2 commits intoExpensify:masterfrom
TaduJR:fix/ios-voiceover-picker-accessibility
Open

fix(a11y): add iOS VoiceOver support to picker and Done button#22
TaduJR wants to merge 2 commits intoExpensify:masterfrom
TaduJR:fix/ios-voiceover-picker-accessibility

Conversation

@TaduJR
Copy link

@TaduJR TaduJR commented Mar 18, 2026

Summary

Adds built-in accessibility to renderIOS() and the Done button, matching the pattern established in renderAndroidHeadless() (PR #19). Also fixes an upstream regression that broke iOS picker touch handling.

iOS picker wrapper (ios_touchable_wrapper)

  • accessible={true}
  • accessibilityRole="button" (combobox has no effect on iOS — facebook/react-native#50123)
  • accessibilityLabel extracted from pickerProps.accessibilityLabel
  • accessibilityState={{ disabled, expanded: showPicker }}

Done button (done_button)

  • accessibilityRole="button"
  • accessibilityLabel={doneText}

Upstream regression fix

  • Restored pointerEvents="none" on the TextInput in renderTextInputOrChildren(), removed during the upstream merge (8.1.0 → 9.3.1). Without it, the native TextInput intercepts touches on iOS, preventing the picker from opening.

Library props are placed after {...touchableWrapperProps} / {...touchableDoneProps} so library values take precedence, ensuring consistent screen reader behavior.
Demo:

Screen.Recording.2026-03-23.at.5.26.46.in.the.afternoon.mov

cc @eVoloshchak @inimaga

@TaduJR
Copy link
Author

TaduJR commented Mar 20, 2026

Friendly bump @eVoloshchak

When you have a moment.

Thanks!

@eVoloshchak
Copy link

@TaduJR, does this work for you on iOS?
For me the picker on iOS does not work, there is no way to change the language

Screen.Recording.2026-03-20.at.12.22.44.mov

It also doesn't have a type

Screenshot 2026-03-20 at 12 20 29

@TaduJR
Copy link
Author

TaduJR commented Mar 23, 2026

@TaduJR, does this work for you on iOS?
For me the picker on iOS does not work, there is no way to change the language

Hi @eVoloshchak

There was breaking change and accessibility role inconsistency on the new iOS versions. I was testing on iOS 18 and it was working not sure how.

Pushed the latest code.

Copy link

@eVoloshchak eVoloshchak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tests well

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants