UIAccessibility change les annonces vocales UITableView (numéro de ligne)

Avec VoiceOver activé, un user peut utiliser un geste de balayage à trois doigts pour faire défiler les vues de table. VoiceOver annonce verbalement à l'user une phrase indiquant sa position sur la vue de table, c'est-à-dire les lignes visibles telles que "Lignes 1 à 4 sur 5".

Je voudrais passer outre à cette invite verbale et get une voix off pour annoncer autre chose à l'user.

Vous ne pouvez pas changer seulement le message. Vous devrez surcharger accessibilityScroll: et faire le défilement, puis publier l'annonce de défilement (au less, je ne connais pas d'autre moyen). Ce n'est pas super dur cependant.

Que faire

Puisque vous avez une vue de table, vous pouvez faire défiler jusqu'à une certaine ligne en utilisant scrollToRowAtIndexPath:atScrollPosition:animated: Vous pouvez décider qu'un élément d'accessibilité est X nombre de lignes. Dans ce cas, vous obtenez l'set des lignes visibles de la vue de la table et ajoutez ou retirez X à la rangée de la dernière ou de la première cellule (selon que le défilement est en haut ou en bas).

Enfin pour annoncer que la vue de la table a fait défiler, vous devriez postr une notification "page défilée" et passer le text à lire. Enfin, vous devriez returnner YES pour dire que vous avez géré le défilement (si vous ne le faites pas, l'événement continuera à se propager).

Exemple d'implémentation

Une implémentation de base pourrait ressembler à ceci (je fais des hypothèses qui peuvent changer en fonction de votre code, comme s'il n'y avait qu'une seule section):

 - (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction { BOOL isScrollingUp = NO; switch (direction) { case UIAccessibilityScrollDirectionUp: { isScrollingUp = YES; } break; case UIAccessibilityScrollDirectionDown: { isScrollingUp = NO; } break; default: // These cases are not handled return NO; } NSInteger numberOfCellsToScroll = 5; // Any number you'd like NSInteger newRow = -1; if (isScrollingUp) { newRow = [self.tableView indexPathsForVisibleRows][0].row - numberOfCellsToScroll; } else { newRow = [[self.tableView indexPathsForVisibleRows] lastObject].row + numberOfCellsToScroll; } [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:newRow inSection:0] atScrollPosition:UITableViewScrollPositionMiddle animated:YES]; UIAccessibilityPostNotification(UIAccessibilityPageScrolledNotification, @"YOUR CUSTOM TEXT FOR THE SCROLL HERE"); return YES; // We handled the scroll } 

Utilisez UIScrollViewAccessibilityDelegate et implémentez la méthode -accessibilityScrollStatusForScrollView:

Exemple

 - (NSSsortingng *)accessibilityScrollStatusForScrollView:(UIScrollView *)scrollView { return @"Your text"; }