18

我正在使我的 iOS 应用程序可访问,我快完成了。我的应用程序包含几个自定义屏幕转换,当 VoiceOver 开启时,它似乎会选择最左上角的元素来描述转换后的内容,或者偶尔选择一个随机元素。UIAccessibilityTraitSummaryElement看起来很有希望,但据我了解,它仅在应用程序启动时有效,而不是在任意转换之后。

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

4

2 回答 2

20

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

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, myAccessibilityElement);

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

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

原文: iOS 6 中的新 API 无法在此处讨论,因为它仍处于 NDA 之下,但可以在 WWDC 2012 (Session 210) 的“iOS 可访问性”视频中找到。

但是,如果做不到这一点,解决方法可能是手动触发公告以覆盖默认的重点可访问性标签公告:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Your text");
于 2012-08-16T21:02:20.933 回答
6

由于这个可访问性建议站点,提供了强制 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)也可用于定义这 2 个解释。

于 2018-05-25T14:43:58.530 回答