我正在使我的iOS应用程序可访问,我差不多完成了。我的应用程序包含几个自定义屏幕转换,当VoiceOver打开时,它似乎选择要在转换后描述的最左上角元素,或偶尔选择随机元素。 UIAccessibilityTraitSummaryElement
看起来很有前途,但据我所知它只适用于应用程序启动时,而不是任意转换后。
似乎没有可访问性特征或属性来指定元素被赋予VoiceOver焦点的首选顺序。有没有办法强制VoiceOver焦点?
编辑:iOS 6现已推出,正如kevboh所述,您现在可以在发布UIAccessibilityLayoutChangedNotification
或UIAccessibilityScreenChangedNotification
时传递参数:
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");
由于这个accessibility recommendations site,有趣的解释强制VoiceOver焦点和重新排序希望的元素。
通知内容变更
当当前页面中的内容更改时,可以使用多种类型的通知来通知辅助功能API。为此,我们必须使用UIAccessibilityPostNotification方法将更改通知发送到辅助功能API。
有几种类型的更改通知,但最常用的两种是:
阅读顺序
使用UIAccessibilityContainer协议重新定义VoiceOver读取顺序。我们的想法是有一个元素表来定义元素的阅读顺序。使用shouldGroupAccessibilityElement属性通常非常有用,因此我们只有一个精确的顺序,但仅适用于视图的一部分(视图的其余部分将使用VoiceOver提供的本机顺序读取)。
说明此功能的最佳方法是键盘,其键顺序不是必要的。这是所需的顺序:1,2,3,4,7,6,8,9,5。创建了两个视图(蓝色和灰色),我们以图形方式将数字放在下面定义的数字中:
插图和code snippets(Swift&ObjC)也可用于定义这两个解释。