Reputation: 55865
I have a UICollectionView
that I want to show, but I may place a UIView
overtop of it with a slightly translucent background. When that occurs I need to prevent the user from interacting with the collection view - they should only be able to interact with the view that appears overtop of it. To do that, I've made the view fill the collection view's bounds and that works well. However I noticed when users of VoiceOver use the app, if they tap on the view it will focus it but then if they swipe right to go to the next element it will focus the first cell in the collection view and allow interacting with it. How can I completely prevent interacting with the collection view for all users?
I've tried setting scrollingEnabled
to false
and also userInteractionEnabled
to false
for the collectionView
but that didn't do the trick. The label I have within each cell is still accessible, therefore the entire collection view is accessible.
Upvotes: 3
Views: 1994
Reputation: 14508
Looks like accessibilityElementsHidden
is the property you want; should be able to set this to YES on the UICollectionView to hide that subtree. From docs:
You might use this property to hide views that are covered by the arrival of a new view. In this case, the hidden views might remain visible onscreen, but they are not the focus of the user’s actions.
...which sounds like a good match for your case.
Upvotes: 1
Reputation: 1312
If users really should be only able to interact with the view that is on top of it and no other view (including the collection view), consider setting accessibilityViewIsModal
on the view that is on top.
To nicely see what accessibilityViewIsModal
does in practice, consider seeing the excellent interactive Figure 1 at Adding accessible behavior by David Rönnqvist, in section "Implementing accessible modal views".
Upvotes: 0