UIAccessibility更改UITableView画外音公告(#行#)

Des*_*Des 6 accessibility tableview ios voiceover uiaccessibility

启用VoiceOver后,用户可以使用3指滑动手势滚动TableView.VoiceOver口头向用户宣布一个短语,表示他们在桌面视图上的位置,即可见的行,例如"第1行到第4行".

我想覆盖这个口头提示并获得画外音,向用户宣布其他内容.

Epo*_*ese 22

使用UIScrollViewAccessibilityDelegate并实现方法-accessibilityScrollStatusForScrollView:

- (NSString *)accessibilityScrollStatusForScrollView:(UIScrollView *)scrollView
{
    return @"Your text";
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ist 10

您不能更改消息.您将不得不覆盖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
}
Run Code Online (Sandbox Code Playgroud)