ios - 加载 View Controller 后的画外音顺序

标签 ios objective-c accessibility voiceover

我有这样的需求。

我的 View Controller 正在从远程休息服务加载数据,数据显示在表格中。在加载过程开始之前,我需要画外音说

“正在加载建筑物。请稍候”

加载数据成功后需要画外音说

“加载的建筑物”

然后我需要在我的 View Controller 中说明标题中的内容

“选择建筑物”。

顺序很重要。现在画外音在加载 Controller 后开始读取 Controller 标题中的内容。当我的建筑物数据加载开始时,“选择建筑物”标题消息被中断并开始“加载建筑物。请稍候”。盲人需要以正​​确的顺序了解此状态,因此在加载数据后我需要说“选择建筑物”。

我需要控制语音消息的顺序。我需要控制何时说出 controller.title 内容或从画外音中禁用 controller.title。

要通知画外音说些什么,我正在使用这段代码:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Buildings loaded");

最佳答案

UIAccessibilityScreenChangedNotification 有问题。这应该做你想做的。

替代方案如下:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Buildings loaded");

然而,这也被窃听了,耶苹果!获得所需行为的唯一选择是劫持屏幕更改通知,因为它是 iOS 8.2 中唯一没有错误的通知。

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Say these words please");

这在 VoiceOver 中提供了额外的小哔哔声,但这并不可怕。因此,这对您有用,但是,从 A11y 的角度来看,我建议的解决方案如下:

当你加载你的 viewcontroller 时,请稍等对话框出现,将焦点移到它上面。据推测,这实际上是模态的(意味着在完成此操作之前您无法与应用程序的其余部分进行交互)。如果您提供 UIElement,焦点将转移到该元素,而不是提供要宣布的字符串。

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _PleaseWaitLabel);

然后,加载完成后,执行以下操作:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _ChooseABuildingHeading);

完全跳过“建筑物加载”公告,这是没有必要的,只要您等待的公告是模态的,然后您将焦点转移到正确的标题上,就会很明显发生了什么。

关于ios - 加载 View Controller 后的画外音顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29537975/

相关文章:

ios - iOS 上的 Base64 编码最后缺少填充

ios - UIAlertView 没有响应

objective-c - 基于 View 的表格 View 中的进度指示器

objective-c - 仅将日期作为 NSDate 添加到核心数据中

html - 将文本添加到页面顶部,而不会将页面的其余部分向下推

JavaScript 生成的代码和屏幕阅读器

ios - 如果我拒绝构建,是否需要增加版本号

ios - 在谷歌地图中显示组标记 - Swift 3.1

javascript - 如何为屏幕阅读器用户指示必填字段和表单验证?

ios - CCNode.children 的功能 - 这是冗余代码吗?