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:方法,但是看不出是否符合我的情况。
谢谢。
答案 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;
}