我有这样的要求。
我的视图控制器正在从远程休息服务加载数据,数据显示在表中。在加载过程开始之前,我需要画外音说
“正在装载建筑物。请稍候”
加载数据成功后我需要画外音说
“建筑物装载”
之后我需要说明我的视图控制器中的标题是什么
“选择建筑物”。
订单非常重要。现在,在加载控制器标题后,Voiceover正在开始读取。当我的建筑物数据加载开始时,“选择建筑物”标题消息被中断并且“正在加载建筑物。请等待”开始。盲人需要以正确的顺序通知这些状态,所以在加载数据后我需要说“选择建筑物”。
我需要控制语音消息顺序。我需要控制何时说出controller.title内容,或者从配音中禁用controller.title。
告知画外音我说的是我正在使用这段代码:
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, @"Buildings loaded");
答案 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);
完全忽略“建筑物装载”公告,没有必要,只要你的等待公告是模态,然后你将焦点转移到正确的标题,就会发生什么事情。