【问题标题】:UIAccessibility change UITableView voiceover announcements (row # of #)UIAccessibility 更改 UITableView 画外音公告(第 # 行,共 # 行)
【发布时间】:2013-03-18 15:17:35
【问题描述】:

启用 VoiceOver 后,用户可以使用 3 指滑动手势来滚动 TableView。 VoiceOver 会向用户口头宣布一个短语,指示他们在 tableview 上的位置,即可见的行,例如“Rows 1 to 4 of 5”。

我想覆盖这个口头提示并让画外音向用户宣布其他内容。

【问题讨论】:

  • 你想宣布什么?给我们更多细节,我们可以为您提供解决方案。

标签: ios tableview accessibility voiceover uiaccessibility


【解决方案1】:

使用UIScrollViewAccessibilityDelegate并实现方法-accessibilityScrollStatusForScrollView:

示例

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

【讨论】:

  • 从 iOS 6 开始,这是正确的做法。比公认的答案简单得多。
  • 完美而简单!谢谢!
  • 并且有一个相应的 UIPickerViewAccessibilityDelegate,它可以按您的预期工作。这两个 UI 元素的默认旁白还有很多不足之处。
【解决方案2】:

您不能更改消息。您将不得不覆盖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
}

【讨论】:

  • 不过我很好奇:这是否意味着当用户向上或向下滚动三指滚动时,我可以使用此覆盖来完全控制表格视图向上或向下移动的行数?到目前为止,我假设我的 3 根手指向上或向下拖动多远决定了表格滚动的距离。
  • @MusiGenesis 是的,三指滚动更像是滑动手势而不是平移手势。用户向上或向下滚动一次,然后您切换到下一个或上一个“页面”。
猜你喜欢
  • 2012-09-23
  • 2014-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多