2

As you might know, iOS VoiceOver mode provides two ways to navigate through elements on the screen. One is touching directly inside the frame of an interface element, and the other is traversing elements one by one in order of appearance, by swiping left or right anywhere on the screen.

Now our app has a UITableView with a button in every cell that is seldom used, but still functionally important.

In order to browse through the table view quicker, our users are asking us to configure VoiceOver mode in our app in a way that it skips reading the title of this button only while navigating using swipes. Can't use accessibilityElementsHidden here, as the button still has to be discoverable by user touching it directly for when it's actually needed. But while navigating by swipes, it should be ignored by the screen reader. (accessibilityElementsHidden disables it for both modes of navigation, rendering the button completely inaccessible to VoiceOver users)

We sifted through UIAccessibilityTraits but to no avail. Do you know a way to achieve this behavior?

Şafak Gezer
  • 3,928
  • 3
  • 47
  • 49
  • 1
    Not to nit-pick but `"VoiceOver mode provides two ways to navigate through elements"` is not completely accurate. There are many more ways to navigate than the two you mentioned. The rotor provides several more - navigating vertically, navigating by buttons, navigating by table rows, etc. How many of those does your user want to ignore? I think it's a bad idea to presume that every VO user navigates the same way and you should not try to hide elements based on gesture navigation. @david's idea is a better alternative. – slugolicious Jun 12 '19 at 15:33
  • @slugolicious Yup, that's what we decided to implement after all. This approach should play much better with other aspects of the accessibility functions. Thank you for your input! – Şafak Gezer Jun 12 '19 at 20:55

1 Answers1

3

I don't think I've seen this behavior—skipping focusable elements—in any app. Instead what table view cells that have buttons in them typically do is to provide the buttons functionality as a "custom action". When VoiceOver focuses on the cell it will let the user know that custom actions are available, and the user can swipe up or down to change which action is invoked when they activate the element/cell (with a double tap).

This way a single swipe will move focus from one cell to another and the buttons functionality is still accessible.

David Rönnqvist
  • 56,267
  • 18
  • 167
  • 205