Ios UIAccessibilityNotification问题
我对iOS易访问性领域非常陌生,我正在尝试使用UIAccessibilityNotification功能,但它并没有像我想象的那样工作。我用一个按钮编写了一个非常简单的应用程序,当你点击按钮时,这个方法被调用Ios UIAccessibilityNotification问题,ios,swift,accessibility,voiceover,Ios,Swift,Accessibility,Voiceover,我对iOS易访问性领域非常陌生,我正在尝试使用UIAccessibilityNotification功能,但它并没有像我想象的那样工作。我用一个按钮编写了一个非常简单的应用程序,当你点击按钮时,这个方法被调用 - (IBAction)announce:(id)sender { UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"
- (IBAction)announce:(id)sender {
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,
@"Speak this out loud");
}
据我所知,当你点击按钮时,画外音会显示“大声说出来”,但它会显示按钮名称。有谁能告诉我代码有什么问题,或者为什么我用错了
为了弄清楚,我双击了按钮。当你点击按钮时,它会读取按钮名称和特征(“按钮”),当你双击它时,它只会读取按钮名称
感谢@ChrisCM的回答。推迟宣布会使它生效
@IBAction func announce(sender: AnyObject) {
let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))
dispatch_after(dispatchTime, dispatch_get_main_queue(), {
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Item added to cart")
})
}
但这里仍然有一个小问题,单击“添加到购物车”按钮后,画外音将指向第一个可访问的项目,即后退按钮,并读取“后退按钮”,然后读取announcementNotification参数 您对通知如何工作的理解是正确的,但是您对voiceover如何处理基本交互的理解是错误的。当您发布公告时,它会启动,但会立即被对ui交互的标准画外音响应中断,即宣布所按内容的可访问性标签。在充分延迟后发布您的公告,或者基本上基于除点击之外的任何内容 关于问题的第二部分(第一个可访问性问题是重点)。这可能是因为正在进行某些屏幕重新绘制,因此视图绘制继承人正在发布固有的
UIAccessibilityScreenChangedNotification
。您应该通过自己发布此通知,使用您希望突出显示的元素来覆盖此通知。可能是启动屏幕更改的元素,也可能是由于此交互而添加的新内容。基于ChrisCM,实现了以下功能:
if UIAccessibility.isVoiceOverRunning {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "message")
}
}
在设备上启用辅助功能(画外音)时,您需要双击一个按钮来执行其操作。@rmaddy感谢您的回复!是的,我双击了按钮,但它读取的是按钮的名称,而不是我传递给postNotification方法的参数:(你不应该“进化”问题。添加新的澄清内容是可以的,但是如果您已经解决了最初提出的问题,并且导致了新问题,那么您应该接受答案并提出新问题。感谢您的回答!我在那里延迟了一段时间,它正在工作!只是想知道是否可以禁用对ui交互的特定标准画外音响应?我在收到反馈之前再次听到按钮名称有点奇怪,谢谢!不,你不能。你应该更新你的代码,这样我们可以看到你是如何发布延迟的。下面是一个关于如何添加延迟的好帖子: