如何才能获得辅助功能滑动以正确导航子视图集合?

时间:2013-06-25 16:55:05

标签: ios voiceover uiaccessibility

Apple打算通过单个滑动手势按顺序将VoiceOver光标移动到屏幕项目中,但我的不会因为用户可以移动它们而进行移动!

我的主视图有一组按钮和标签,但它也有两个自定义子视图集合,让我们调用实例SVA1到SVA9& SVB1到SVB9从左到右按“升序”排列。也就是说,SVA是一个自定义的UIView类,而SVB是第二个。当我将SVA3拖到SVA6的当前位置时,我最终得到SVA1,SVA2,SVA4,SVA5,SVA3,SVA6,SVA7,SVA8&的顺序。 SVA9。这些集合是“链接的”,因此现在也可以通过我的代码在SVB子视图集合中镜像相同的订单。

我的问题是向右滑动,期待VoiceOver读出我的项目,因为我在屏幕上看到它们导致不同的顺序。它得到了很多正确但然后突然将VoiceOver光标从第一个集合移动到第二个集合或改变它的方向。移动后,我的代码知道所有子视图的新顺序,但我希望能够将这些信息传递给VoiceOver。

每个自定义子视图都是accessibilityElement。有没有办法告诉VoiceOver按照我期望的顺序回读我的项目?我遇到过-accessibilityElementAtIndex:方法,但是看不出是否符合我的情况。

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您想更改订单,则accessibilityElementAtIndex:UIAccessibilityContainer协议的其余部分就是您要查找的内容。

假设您有一个名为accessibleElements的数组,它按照您希望它们出现的顺序存储元素。

- (NSInteger)accessibilityElementCount {
    return self.accessibleElements.count;
}

- (id)accessibilityElementAtIndex:(NSInteger)index {
    return self.accessibleElements[index]; 
}

- (NSInteger)indexOfAccessibilityElement:(id)element {
    return [self.accessibleElements indexOfObject:element];
}

容器本身不能是辅助功能元素,因此您还应该覆盖isAccessibilityElement

- (BOOL)isAccessibilityElement {
    return NO;
}