UIAccessibility更改UITableView配音公告(第#行)

启用VoiceOver后,用户可以使用三指滑动手势来滚动TableViews。 VoiceOver向用户口头通知一个短语,指示它们在桌面视图上的位置,即可见的行,例如“第1行至第4行”。

我想覆盖这个口头提示,并获得配音宣布别的东西给用户。

您不能更改消息。 你将不得不重写accessibilityScroll:并滚动,然后张贴滚动公告(至less我不知道任何其他方式)。 这并不是很难。

该怎么办

既然你有一个表格视图,你可以使用scrollToRowAtIndexPath:atScrollPosition:animated:来滚动到某一行。 您可以决定一个辅助function元素是X行数。 在这种情况下,您从表视图中获取可见行集,并将X添加到最后一个或第一个单元格的行(取决于滚动是向上还是向下)。

最后宣布表视图做了滚动,你应该发布一个“页面滚动”的通知,并通过文本阅读。 最后,你应该返回YES来说你处理滚动(如果你不这样做,事件将继续传播)。

示例实现

一个基本的实现可能看起来像这样(我做了一些假设,可能会改变,取决于你的代码,就像只有一个部分):

 - (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 } 

使用UIScrollViewAccessibilityDelegate并实现方法-accessibilityScrollStatusForScrollView:

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