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

时间:2012-05-18 21:17:40

标签: objective-c ios cocoa-touch accessibility voiceover

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

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

2 个答案:

答案 0 :(得分:18)

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

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, myAccessibilityElement);
在大多数情况下,

myAccessibilityElement将是一个将isAccessibilityElement设置为YES的UIView(许多视图的默认设置)。

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

ORIGINAL: iOS 6中的新API无法在此讨论,因为它仍处于NDA状态,但可以在WWDC 2012的“Accessibility for iOS”视频中找到(Session 210) )。

如果不这样做,解决方法可能是手动触发公告以覆盖默认的重点辅助功能标签公告:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Your text");

答案 1 :(得分: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提供的本机顺序读取)。 / p>

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

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