6

VoiceOverを有効にすると、ユーザーは3本の指でスワイプしてTableViewをスクロールできます。VoiceOverは、テーブルビューでの位置を示すフレーズ、つまり「行1から4/5」などの表示可能な行をユーザーに口頭でアナウンスします。

この口頭でのプロンプトを上書きし、ナレーションでユーザーに何か他のことをアナウンスしたいと思います。

4

2 に答える 2

23

UIScrollViewAccessibilityDelegateを使用して、メソッド-accessibilityScrollStatusForScrollViewを実装します。

- (NSString *)accessibilityScrollStatusForScrollView:(UIScrollView *)scrollView
{
    return @"Your text";
}
于 2013-08-29T13:41:05.727 に答える
11

メッセージだけを変更することはできません。スクロールを上書きaccessibilityScroll:して実行してから、スクロールアナウンスを投稿する必要があります(少なくとも他の方法はわかりません)。でも、それほど難しいことではありません。

何をすべきか

テーブルビューがあるので、を使用して特定の行にスクロールできますscrollToRowAtIndexPath:atScrollPosition:animated:。1つのアクセシビリティ要素はX行数であると判断できます。その場合、テーブルビューから表示されている行のセットを取得し、最後または最初のセルの行にXを追加または削除します(スクロールが上か下かによって異なります)。

最後に、テーブルビューがスクロールしたことを通知するには、「ページスクロール」通知を投稿し、読むテキストを渡す必要があります。最後にYES、スクロールを処理したことを示すために戻る必要があります(そうでない場合、イベントは伝播し続けます)。

実装例

基本的な実装は次のようになります(セクションが1つしかないなど、コードに応じて変更される可能性のあるいくつかの仮定を行っています)。

- (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
}
于 2013-03-25T13:27:41.577 に答える