Accessibilité pour iOS, problème de command de lecture VoiceOver

entrez la description de l'image ici

Est-il possible de modifier l'ordre dans lequel la fonctionnalité VoiceOver pour l'accessibilité de l'iPad lit les éléments, lorsque le geste 'Effleurer deux doigts' est terminé?

Pour l'image jointe, qui contient 3 labels et un button, le VoiceOver lit les éléments de la façon suivante,

Étiquette 1 -> Étiquette 2 -> Bouton -> Étiquette 3

L'ordre peut-il être changé en

Étiquette 1 -> Étiquette 2 -> Étiquette 3 -> Bouton

    Le moyen le plus rapide d'y parvenir pour votre exemple est de placer les trois labels dans une sous-class UIView transparente pour servir de conteneur à vos labels. Cette sous-class devra être correctement configurée pour que VoiceOver sache comment l'interpréter. Si votre cible de deployment est iOS6 vous pouvez simplement répondre à la question "devrait-on regrouper les enfants d'accessibilité" dans cette sous-class.

     -(BOOL)shouldGroupAccessibilityChildren{ return YES; } 

    Pour iOS6 ci-dessous, ce serait plus compliqué, sauf que votre sous-class de conteneur UIView ne contiendrait que des UILabels qui sont des éléments d'accessibilité. Vous pourriez l'implémenter comme ceci:

     -(BOOL)isAccessibilityElement{ return NO; } -(NSInteger)accessibilityElementCount{ return self.subviews.count; } -(id)accessibilityElementAtIndex:(NSInteger)index{ return [self.subviews objectAtIndex:index]; } -(NSInteger)indexOfAccessibilityElement:(id)element{ return [self.subviews indexOfObject:element]; } 

    J'ai testé cet exemple de code et il fait ce que vous cherchez, si vous avez besoin d'une clarification s'il vous plaît append un commentaire. Toujours heureux de rendre les choses plus accessibles.

    J'ai essayé de shouldGroupAccessibilityChildren le shouldGroupAccessibilityChildren à YES mais cela n'a pas fonctionné pour moi.

    Ce qui fonctionnait pour moi était de définir directement l'label d'accessibilité de la vue parente (parce que je voulais que tous les éléments soient lus en un seul geste / un geste VoiceOver).

     [cell setAccessibilityLabel:[NSSsortingng ssortingngWithFormat:@"%@, %@", cityLabel, temperatureLabel]]; 

    L'extrait de code ci-dessus provient de la documentation d'Apple Amélioration de l'accessibilité des cellules de vue de table

    Je pense que vous pouvez le faire dans le storyboard. L'ordre VoiceOver est déterminé par l'ordre des vues dans le plan du document.

    Faites simplement glisser les vues dans la hiérarchie de vue dans le bon ordre.

    Dans Swift, attachez un IBOutlet à l'UIView parent, puis définissez shouldGroupAccessibilityChildren à true suffira.

    abc.shouldGroupAccessibilityChildren = true

    J'ai noté que si le paramètre isAccessibilityElement = true est également isAccessibilityElement = true le regroupement ne prendra pas effet. De même, si vous cochez la case d'accessibilité du storyboard ou du xib, cela empêchera le regroupement d'avoir lieu.