加载视图控制器后的画外音顺序

时间:2015-04-09 12:02:34

标签: ios objective-c accessibility voiceover

我有这样的要求。

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

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

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

“建筑物装载”

之后我需要说明我的视图控制器中的标题是什么

“选择建筑物”。

订单非常重要。现在,在加载控制器标题后,Voiceover正在开始读取。当我的建筑物数据加载开始时,“选择建筑物”标题消息被中断并且“正在加载建筑物。请等待”开始。盲人需要以正​​确的顺序通知这些状态,所以在加载数据后我需要说“选择建筑物”。

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

告知画外音我说的是我正在使用这段代码:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Buildings loaded");

1 个答案:

答案 0 :(得分:1)

UIAccessibilityScreenChangedNotification被窃听。这应该做你想要的。

另一种选择是:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Buildings loaded");

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

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

这在VoiceOver中提供了额外的小Beep-Boop功能,但这并不可怕。所以,这对你有用,但是,从A11y的观点我建议的解决方案如下:

当你加载你的视图控制器,并出现请等待的情语时,将焦点移到它。据推测,这实际上是Modal(意味着在完成此操作之前,您无法与应用程序的其余部分进行交互)。如果您提供UIElement,焦点将转移到元素,而不是提供要宣布的字符串,它将被读出。

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _PleaseWaitLabel);

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

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, _ChooseABuildingHeading);

完全忽略“建筑物装载”公告,没有必要,只要你的等待公告是模态,然后你将焦点转移到正确的标题,就会发生什么事情。