Skip to content

Make role-based interactive views keyboard-focusable on iOS - #57822

Closed
fkgozali wants to merge 1 commit into
react:mainfrom
fkgozali:export-D114784056
Closed

Make role-based interactive views keyboard-focusable on iOS#57822
fkgozali wants to merge 1 commit into
react:mainfrom
fkgozali:export-D114784056

Conversation

@fkgozali

@fkgozali fkgozali commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Summary:
On iOS, Full Keyboard Access decides whether a Fabric view can take keyboard focus
from its UIKit accessibility trait mask. That mask is a lossy projection of the
role / accessibilityRole prop: checkbox, radio, combobox, dropdownlist,
menuitem, spinbutton, tab, and the ARIA option, searchbox, slider and
treeitem all resolve to no interactive trait, because VoiceOver conveys those
roles through accessibilityValue instead. Controls authored with any of them were
unreachable with a keyboard - a WCAG 2.1.1 (Keyboard) failure.

Derive focusability from the role as well as the trait mask. Behaviour is otherwise
unchanged: views that opt out of accessibility (accessible={false}) and views with
no interactive role stay unfocusable, VoiceOver is untouched (it keys off
isAccessibilityElement), and tvOS keeps its existing focusable path.

Changelog:
[iOS][Fixed] - Views with checkbox, radio, combobox, dropdownlist, menuitem, spinbutton, tab, option, searchbox, slider and treeitem roles are now reachable via Full Keyboard Access

Differential Revision: D114784056

Summary:
On iOS, Full Keyboard Access decides whether a Fabric view can take keyboard focus
from its UIKit accessibility trait mask. That mask is a lossy projection of the
`role` / `accessibilityRole` prop: `checkbox`, `radio`, `combobox`, `dropdownlist`,
`menuitem`, `spinbutton`, `tab`, and the ARIA `option`, `searchbox`, `slider` and
`treeitem` all resolve to no interactive trait, because VoiceOver conveys those
roles through `accessibilityValue` instead. Controls authored with any of them were
unreachable with a keyboard - a WCAG 2.1.1 (Keyboard) failure.

Derive focusability from the role as well as the trait mask. Behaviour is otherwise
unchanged: views that opt out of accessibility (`accessible={false}`) and views with
no interactive role stay unfocusable, VoiceOver is untouched (it keys off
`isAccessibilityElement`), and tvOS keeps its existing `focusable` path.

Changelog:
[iOS][Fixed] - Views with checkbox, radio, combobox, dropdownlist, menuitem, spinbutton, tab, option, searchbox, slider and treeitem roles are now reachable via Full Keyboard Access

Differential Revision: D114784056
@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 4, 2026
@meta-codesync

meta-codesync Bot commented Aug 4, 2026

Copy link
Copy Markdown

@fkgozali has exported this pull request. If you are a Meta employee, you can view the originating Diff in D114784056.

@facebook-github-tools facebook-github-tools Bot added p: Facebook Partner: Facebook Partner labels Aug 4, 2026
@meta-codesync meta-codesync Bot closed this in 05b97de Aug 5, 2026
@meta-codesync meta-codesync Bot added the Merged This PR has been merged. label Aug 5, 2026
@meta-codesync

meta-codesync Bot commented Aug 5, 2026

Copy link
Copy Markdown

This pull request has been merged in 05b97de.

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

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Merged This PR has been merged. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant