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 UILabel
s 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 № 1Je pense que ce que vous cherchez, c'est:
- ensemble
isAccessibilityElement = true
sur le UITableViewCell - ensemble
accessibilityLabel
à tout ce que vous voulez sur leUITableViewCell
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;
}