当使用iPad上的可访问性VoiceOver功能时,通过“Two-finger Flick Down”手势读取元素时,是否可以更改其顺序?
对于附带的包含3个标签和一个按钮的图像,VoiceOver按以下方式读取元素:
标签1 -> 标签2 -> 按钮 -> 标签3
能否将顺序更改为:
标签1 -> 标签2 -> 标签3 -> 按钮
当使用iPad上的可访问性VoiceOver功能时,通过“Two-finger Flick Down”手势读取元素时,是否可以更改其顺序?
对于附带的包含3个标签和一个按钮的图像,VoiceOver按以下方式读取元素:
标签1 -> 标签2 -> 按钮 -> 标签3
能否将顺序更改为:
标签1 -> 标签2 -> 标签3 -> 按钮
在您的示例中实现这一点的最快方法是将三个标签放置在一个透明的 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
设置为YES
,但对我没有起作用。
对我有用的是直接设置父视图的可访问标签(因为我希望所有项都在一个手势内被读取)。
[cell setAccessibilityLabel:[NSString stringWithFormat:@"%@, %@", cityLabel, temperatureLabel]];
我注意到,如果还设置abc.shouldGroupAccessibilityChildren = true
isAccessibilityElement = true
,则分组将不会生效。同样,在storyboard或xib中勾选辅助功能复选框也会阻止分组。我认为你可以在Storyboard中完成它。VoiceOver的顺序由文档大纲中视图的顺序确定。
只需按正确顺序在视图层次结构中拖放视图即可。
shouldGroupAccessibilityChildren
似乎没有被调用。 - BreakpointshouldGroup..
只会被 iOS6 设备调用,而不是所有使用 >=6 SDK 构建的应用程序。同时请确认包含标签的视图在 xib 或 storyboard 中使用身份检查器是你自定义的类。如果还有问题,请告诉我。 - NJonesshouldGroup..
,两个操作系统版本都调用了前4个pre-6.0方法。我个人认为应该在你的类中保留shouldGroup..
。如果在运行pre-6.0时不会被调用,但它并不是不安全的。但是,如果Apple在未来优化了某些内容,你的代码将准备就绪。 - NJones