Adding "heading" behavior to UICollectionView cells inside a section for VoiceOver users

Let's say I have a music library view controller comprising a UICollectionView, where the cells (that are songs) are grouped alphabetically, and a cell can either be a song or a loop in the respective song (e.g. the image attached).

My question is whether there's a way VoiceOver users can swipe through the headings and song cells but skip over the loop cells in the same way the rotor allows jumping from one header to another. If I'm a VoiceOver user and I know that the loop I'm looking for is not in "Sisters", there's no point in having to go through "Lydian lick 2" and "WOW!"; it should just skip to "T'Wonderful".

Is this possible to implement given the accessibility API that is currently out there? I know I can certainly program it to be nested (i.e. pressing "Sisters >" would change to "Sisters /" and the "Lydian lick 2" and "WOW!" cells would appear) but I like that a user only has to do one press to open either the song or loop (not to mention I now don't have a way of loading the song itself).

Does anyone have any suggestions on how I can improve this design such that it minimizes number of gestures required to open a song/loop, while making it easy for VoiceOver users to skip over loops they know is not in a given song? It'd be highly appreciated!!!

Answered by Engineer in 714211022

There's a few things you can do here.

One, is you can make the loop cells custom actions, so that when the user finds the cell they want, they swipe up or down to select the loop track and select it. https://developer.apple.com/documentation/uikit/uiaccessibilitycustomaction?language=objc

However, if you want the user to be able to tap on these cells via touch exploration that won't help you.

If you want something similar to the headings rotor, you can create a custom rotor in your app, like songs, and have that rotor navigate through your cells. https://developer.apple.com/documentation/uikit/uiaccessibilitycustomrotor?language=objc

Typically, rotors are more for content that is different from the norm, so in this case I would be more surprised to see a "songs" rotor than I would to see a "loops" rotor that navigates me to songs with loops or something. But depending on the flow you are trying to design these might help.

Accepted Answer

There's a few things you can do here.

One, is you can make the loop cells custom actions, so that when the user finds the cell they want, they swipe up or down to select the loop track and select it. https://developer.apple.com/documentation/uikit/uiaccessibilitycustomaction?language=objc

However, if you want the user to be able to tap on these cells via touch exploration that won't help you.

If you want something similar to the headings rotor, you can create a custom rotor in your app, like songs, and have that rotor navigate through your cells. https://developer.apple.com/documentation/uikit/uiaccessibilitycustomrotor?language=objc

Typically, rotors are more for content that is different from the norm, so in this case I would be more surprised to see a "songs" rotor than I would to see a "loops" rotor that navigates me to songs with loops or something. But depending on the flow you are trying to design these might help.

Adding "heading" behavior to UICollectionView cells inside a section for VoiceOver users
 
 
Q