VoiceOver:在屏幕转换后强制选择辅助功能元素

问题描述 投票:16回答:2

我正在使我的iOS应用程序可访问,我差不多完成了。我的应用程序包含几个自定义屏幕转换,当VoiceOver打开时,它似乎选择要在转换后描述的最左上角元素,或偶尔选择随机元素。 UIAccessibilityTraitSummaryElement看起来很有前途,但据我所知它只适用于应用程序启动时,而不是任意转换后。

似乎没有可访问性特征或属性来指定元素被赋予VoiceOver焦点的首选顺序。有没有办法强制VoiceOver焦点?

objective-c ios cocoa-touch accessibility voiceover
2个回答
18
投票

编辑:iOS 6现已推出,正如kevboh所述,您现在可以在发布UIAccessibilityLayoutChangedNotificationUIAccessibilityScreenChangedNotification时传递参数:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, myAccessibilityElement);

在大多数情况下,myAccessibilityElement将是一个UIView,其isAccessibilityElement设置为YES(许多视图的默认值)。

或者,您可以将iOS6 UIAccessibilityTraitHeader中添加的新特征添加到您的辅助功能元素'accessibilityTraits中,这应该具有相同的结果(尽管我还没有对此进行测试)。

原文:iOS 6中有新的API,这里无法讨论,因为它仍然在NDA下,但可以在WWDC 2012的“Accessibility for iOS”视频中找到(Session 210)。

尽管如此,解决方法可能是手动触发公告以覆盖默认的焦点辅助功能标签公告:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Your text");

4
投票

由于这个accessibility recommendations site,有趣的解释强制VoiceOver焦点和重新排序希望的元素。

通知内容变更

当当前页面中的内容更改时,可以使用多种类型的通知来通知辅助功能API。为此,我们必须使用UIAccessibilityPostNotification方法将更改通知发送到辅助功能API。

有几种类型的更改通知,但最常用的两种是:

  • UIAccessibilityLayoutChangedNotification:通过2个可能的传入参数(NSString或UIObject)通知页面的一部分已更改。使用NSString,通知的行为类似于带有VoiceOver发声的UIAccessibilityAnnouncementNotification。使用UIObject,焦点转移到用户界面元素。此通知与UIAccessibilityAnnouncementNotification非常相似,但应该是因为动态内容被删除或添加到当前视图。
  • UIAccessibilityScreenChangedNotification:通知整个页面已更改,包括nil或UIObject作为传入参数。使用nil,页面中的第一个可访问元素将被聚焦。使用UIObject,焦点将通过VoiceOver转移到指定的元素。此通知伴随着声音,包括宣布新页面的声音。

阅读顺序

使用UIAccessibilityContainer协议重新定义VoiceOver读取顺序。我们的想法是有一个元素表来定义元素的阅读顺序。使用shouldGroupAccessibilityElement属性通常非常有用,因此我们只有一个精确的顺序,但仅适用于视图的一部分(视图的其余部分将使用VoiceOver提供的本机顺序读取)。

说明此功能的最佳方法是键盘,其键顺序不是必要的。这是所需的顺序:1,2,3,4,7,6,8,9,5。创建了两个视图(蓝色和灰色),我们以图形方式将数字放在下面定义的数字中:enter image description here

插图和code snippets(Swift&ObjC)也可用于定义这两个解释。

© www.soinside.com 2019 - 2024. All rights reserved.