Touch ID的VoiceOver辅助功能标签

时间:2015-10-14 19:01:11

标签: ios objective-c voiceover uiaccessibility touch-id

我正在尝试确保我正在处理的iOS应用程序是可访问的,并且我正在尝试实施VoiceOver以确保这一点。

我找不到任何帮助的一件奇怪的事情是显示Touch ID视图(在我的情况下是用于登录应用程序)。 VoiceOver将ID称为单词,而不是I.D。

我已尝试将可访问性属性实现到NSString和LAContext对象,但似乎都没有改变VoiceOver读取的内容。下面的代码片段:

LAContext *context = [[LAContext alloc] init];
[context setIsAccessibilityElement:YES];
[context setAccessibilityLabel:@"TEST 2"];

NSError *error = nil;

NSString *label = @"Please authenticate your ID using the Touch ID";
[label setIsAccessibilityElement:YES];
[label setAccessibilityTraits:UIAccessibilityTraitStaticText];
[label setAccessibilityLabel:@"TEST"];

showingTouchID = TRUE;

if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]) {
    [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
            localizedReason:label
                      reply:^(BOOL success, NSError *error) {
......

具有或不具有辅助属性的上下文的VoiceOver输出始终是标签文本。

所有帮助非常感谢:)

3 个答案:

答案 0 :(得分:3)

您绝对不应该更改辅助功能标签,只是为了让VoiceOver正确发音(即不要尝试" hack"标签发音)。原因是VoiceOver只有语音输出;它还具有盲文输出,盲人用户希望在写入时完全逐字逐句地阅读(即完全查看所有空格,大写/小写字母等)。写"我D"而不是" ID",然后VoiceOver可能正确地发音(在特定版本的iOS中),盲人用户,在阅读" I D"在盲文显示器上可能会认为这就是它实际写入和显示的方式,当他们在与其他人的书面交流中使用这种错误的拼写时,让他们说非专业。

处理这个问题的正确方法是:

,尽管没有立即给出解决方案
  1. 向Apple提交有关特定语言与特定语言的特定语音发音的错误(例如"预期发音:[aj' di:]" vs." Actual发音:[id]")
  2. 向Apple提交一个错误请求只能自定义发音的功能(即您可以保留可访问性标签的完整和正确的位置,但指定语音应该如何发出文本的某​​些部分),以及此自定义的位置由译者翻译字符串为每种语言单独完成(因为错误的发音是语言特定的) - 也见下一点。
  3. 如果您可以改写,请尝试使用不同于有问题的单词(这似乎不适用于" Touch ID"这是一个设定的术语)。但这也是一个黑客攻击,因为它只解决了英文原文,而不关心翻译可能相反的翻译可能使发音复杂化。
  4. 抱歉这个坏消息。

    最后,在iOS 8.4.1和iOS 9.0.2上,VoiceOver默认使用美国英语iOS语音,至少在这个网页上发音" ID"在" Touch ID" as [ajdi:],而不是[id]。

答案 1 :(得分:1)

你可以尝试这个来快速解决:只需在I和D之间留出空间

  NSString *label = @"Please authenticate your ID using the Touch ID";
  label.accessibilityLabel=@"Please authenticate your I D using the Touch I D";

另请注意,您只能设置UIElements的辅助功能,并且无法将其设置为常规变量。为LAContext和NSString设置可访问性标签没有意​​义。

你需要将可访问性标签设置为UILabel或你给NSString的元素。

答案 2 :(得分:0)

从iOS 11开始,您可以设置元素的accessibilityAttributedLabel并使用ValueError: total size of new array must be unchanged键(快速键:UIAccessibilitySpeechAttributeIPANotation)来指定属性字符串范围的发音。

请参见"Speech Attributes for Attributed Strings",了解可用于调整VoiceOver读取文本方式的其他工具。