我是iOS Accessibility领域的新手,我正在尝试使用这个UIAccessibilityNotification功能,但它没有像我想象的那样工作 . 我只用一个按钮编写一个非常简单的应用程序,当您单击该按钮时,将调用此方法 .
- (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参数 .
2 回答
您对通知如何工作的理解是正确的,但是您对画外音如何处理基本交互的理解不是 . 当您发布公告时,它会启动,但会立即被ui交互的标准配音响应中断,即宣布按下的内容的可访问性标签 . 在经过一段足够的延迟后发布您的公告,或者基本上只需点击一下即可
对于问题的第二部分(第一个可访问性问题正在集中) . 这可能是因为正在发生一些屏幕重新绘制,因此View绘图层次发布了一个固有的
UIAccessibilityScreenChangedNotification
. 您应该通过自己发布此通知来覆盖此选项,并使用您希望突出显示的元素 . 可能是启动屏幕的元素发生更改,也可能是因此交互而添加的新内容 .基于ChrisCM的answer above,实现了以下内容: