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"; }