iOS的可访问性,VoiceOver读取顺序问题

7

输入图像描述

当使用iPad上的可访问性VoiceOver功能时,通过“Two-finger Flick Down”手势读取元素时,是否可以更改其顺序?

对于附带的包含3个标签和一个按钮的图像,VoiceOver按以下方式读取元素:

标签1 -> 标签2 -> 按钮 -> 标签3

能否将顺序更改为:

标签1 -> 标签2 -> 标签3 -> 按钮

4个回答

15

在您的示例中实现这一点的最快方法是将三个标签放置在一个透明的 UIView 子类中,作为标签的容器。这个子类必须被正确地设置,以让 VoiceOver 知道如何解释它。如果您的部署目标是 iOS6,那么您可以简单地在这个子类中回答“是否应分组可访问性子项”的问题。

-(BOOL)shouldGroupAccessibilityChildren{
    return YES;
}

如果在iOS6以下版本中,这将会更加复杂,除非你的UIView容器子类只包含作为可访问元素的UILabels。你可以像这样实现:

-(BOOL)isAccessibilityElement{
    return NO;
}
-(NSInteger)accessibilityElementCount{
    return self.subviews.count;
}
-(id)accessibilityElementAtIndex:(NSInteger)index{
    return [self.subviews objectAtIndex:index];
}
-(NSInteger)indexOfAccessibilityElement:(id)element{
    return [self.subviews indexOfObject:element];
}

我已经测试了这个示例代码,它可以实现你所需要的功能。如果你需要任何澄清,请添加评论。我很乐意帮助让事情更容易理解。


谢谢你的回答。但是,shouldGroupAccessibilityChildren 似乎没有被调用。 - Breakpoint
1
@Vittal shouldGroup.. 只会被 iOS6 设备调用,而不是所有使用 >=6 SDK 构建的应用程序。同时请确认包含标签的视图在 xib 或 storyboard 中使用身份检查器是你自定义的类。如果还有问题,请告诉我。 - NJones
啊,我漏掉了自定义类部分。真是个愚蠢的错误。现在它可以工作了。非常感谢你。 是的,我正在测试iOS6。需要拥有低于6版本的设备来测试剩下的内容。所以将代码添加到自定义类中就可以了,对吧? - Breakpoint
@Vittal 我在运行iOS6的iPod touch第四代和运行5.1的iPad第一代上测试了这段代码。有趣的是,即使实现了shouldGroup..,两个操作系统版本都调用了前4个pre-6.0方法。我个人认为应该在你的类中保留shouldGroup..。如果在运行pre-6.0时不会被调用,但它并不是不安全的。但是,如果Apple在未来优化了某些内容,你的代码将准备就绪。 - NJones
我注意到了相同的行为 :) 然而,iOS6之前的方法似乎不起作用 :( 在第二代5.1 iPad上进行了测试。有什么想法为什么会这样? - Breakpoint
显示剩余4条评论

4

我尝试将shouldGroupAccessibilityChildren设置为YES,但对我没有起作用。

对我有用的是直接设置父视图的可访问标签(因为我希望所有项都在一个手势内被读取)。

[cell setAccessibilityLabel:[NSString stringWithFormat:@"%@, %@", cityLabel, temperatureLabel]];

以下代码片段来自于苹果的文档《提升表格视图单元格的可访问性》(英文链接)

1
在Swift中,将IBOutlet附加到父UIView,然后将shouldGroupAccessibilityChildren设置为true即可。

abc.shouldGroupAccessibilityChildren = true

我注意到,如果还设置isAccessibilityElement = true,则分组将不会生效。同样,在storyboard或xib中勾选辅助功能复选框也会阻止分组。

0

我认为你可以在Storyboard中完成它。VoiceOver的顺序由文档大纲中视图的顺序确定。

只需按正确顺序在视图层次结构中拖放视图即可。


我已经按正确顺序排列了它们,但是VoiceOver仍然无法正确读取它们。虽然我正在使用iOS 9,但我不知道事情是否有所改变。 - user1366265
1
不,它们通常从屏幕左到右被阅读。 - David Dunham
如何检查文档大纲?我有一个React Native应用。 - gaurav5430

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接