启用 VoiceOver 后,用户可以使用 3 指滑动手势来滚动 TableView。VoiceOver 向用户口头宣布一个短语,指示他们在 tableview 上的位置,即可见的行,例如“第 1 到 4 行,共 5 行”。
我想覆盖这个口头提示并让画外音向用户宣布其他内容。
启用 VoiceOver 后,用户可以使用 3 指滑动手势来滚动 TableView。VoiceOver 向用户口头宣布一个短语,指示他们在 tableview 上的位置,即可见的行,例如“第 1 到 4 行,共 5 行”。
我想覆盖这个口头提示并让画外音向用户宣布其他内容。
使用UIScrollViewAccessibilityDelegate并实现方法-accessibilityScrollStatusForScrollView:
例子
- (NSString *)accessibilityScrollStatusForScrollView:(UIScrollView *)scrollView
{
return @"Your text";
}
您不能只更改消息。您将不得不覆盖accessibilityScroll:
并进行滚动,然后发布滚动公告(至少我不知道任何其他方式)。不过也不是特别难。
由于您有一个表格视图,您可以使用 滚动到某一行scrollToRowAtIndexPath:atScrollPosition:animated:
。您可以决定一个可访问性元素是 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
}