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

kev*_*boh 17 cocoa-touch accessibility objective-c ios voiceover

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

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

Pat*_*pel 19

编辑: iOS 6现已可用,如kevboh所述,您现在可以在发布UIAccessibilityLayoutChangedNotification或时传递参数UIAccessibilityScreenChangedNotification:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, myAccessibilityElement);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Your text");
Run Code Online (Sandbox Code Playgroud)

  • 现在iOS 6是公共的:你可以在发布`UIAccessibilityLayoutChangedNotification`或'UIAccessibilityScreenChangedNotification`作为'UIAccessibilityPostNotification`的第二个参数时传入一个辅助功能元素,而VoiceOver将关注该元素. (4认同)

XLE*_*_22 5

由于这个可访问性推荐站点,提供了有趣的解释来强制 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。创建了两个视图(蓝色和灰色),我们以图形方式将数字放入其中,如下定义: 在此处输入图片说明

插图和代码片段(Swift 和 ObjC)也可用于定义这两种解释。