0

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: 方法,但不知道它是否或如何适合我的情况。

谢谢你。

4

1 回答 1

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;
}
于 2013-06-25T18:08:18.030 回答