/ / Comment faire en sorte que iOS VoiceOver lise Voir et sous-vue dans leur ensemble - ios, uiview, accessibilité, voix off, uiaccessibility

Comment faire pour que iOS VoiceOver lise Vue et sous-vue dans leur ensemble - ios, uiview, accessibilité, voix off, uiaccessibility

j'ai un UITableView qui affiche une liste d'éléments, avec une sous-classe de UITableViewCell. Dans cette cellule, j'ai une hiérarchie de UILabels et subviews comme ceci:

UITableViewCell subclass
- UILabel a
- UILabel b
- UILabel c
- UIView subclass 1
- UILabel 1a
- UILabel 1b
- UIView subclass 2
- UILabel 2a
- UILabel 2b

Je voudrais que VoiceOver lise toutes les étiquettes dans l’ordre présenté ici. Je dois noter ici que visuellement, les étiquettes de la UIView sous-classe sont en ordre inverse (UILabel 1b est au sommet de UILabel 1a, par exemple).

Certaines étiquettes doivent avoir la propriété "accessibilityLabel" définie sur une chaîne personnalisée. Cela se fait dans la configuration du UITableViewCell, une fois le texte connu, soit directement sur les libellés, soit sur les sous-vues. J'ai aussi mis le shouldGroupAccessibilityChildren propriété à OUI.

À l’heure actuelle, mon comportement est le suivant: VoiceOver lit le niveau supérieur. UILabel (a, b & c dans l'exemple). Ensuite, si je glisse pour obtenir le prochain élément, il lit UIView sous-classe 1, puis 2, etc. Lors de la lecture de ces sous-classes, l'ordre de lecture est correct (UILabel 1a, puis 1b, etc.).

Puis-je y parvenir? Ou est-ce que l'utilisateur doit absolument glisser?

Réponses:

3 pour la réponse № 1

Je pense que ce que vous cherchez, c'est:

  1. ensemble isAccessibilityElement = true sur le UITableViewCell
  2. ensemble accessibilityLabel à tout ce que vous voulez sur le UITableViewCell

Cela présentera l'ensemble UITableViewCell en tant qu’élément unique dans VoiceOver (étape 1.) (ce qui est bien, car la navigation avec VoiceOver sur une liste de telles cellules est beaucoup plus efficace et convivial), et vous permet de personnaliser exactement ce que VoiceOver dit pour la cellule (étape 2.).

Notez que dans l'étape 2., vous pouvez aussi être un peu plus créatif - non seulement dire toutes les étiquettes dans l’ordre souhaité, séparées par des virgules, mais aussi ajouter quelques mots pour la rendre plus conviviale (bien que je vous conseille de rester un peu prudent ici pour ne pas entrer dans situation où la présentation serait trop "bavarde", en particulier si l’utilisateur parcourt rapidement plusieurs cellules de ce type lorsqu’il cherche quelque chose - une étiquette trop bavarde peut devenir fastidieuse). Par exemple. s’il s’agissait d’une application de shopping, au lieu de "Pain, 1 USD, en stock" (c’est-à-dire concaténer 3 étiquettes et séparer par une virgule), on pourrait dire "Pain pour 1 USD, en stock" (String(format:) à Swift et [NSString stringWithFormat:] en Objective-C sont vos amis ici; ne pas oublier de localiser la chaîne de format).

Bien sûr, si vous avez besoin ultérieurement de boutons dans la cellule, cela devient un peu plus compliqué. Mais c'est pour une autre question :-)


-2 pour la réponse № 2

Et il y a un autre endroit, dans votre sous-classe, méthode override:

-(BOOL) isAccessibilityElement {
return YES;
}