首页 文章

UIAccessibilityNotificationQuestion

提问于
浏览
4

我是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 回答

  • 4

    您对通知如何工作的理解是正确的,但是您对画外音如何处理基本交互的理解不是 . 当您发布公告时,它会启动,但会立即被ui交互的标准配音响应中断,即宣布按下的内容的可访问性标签 . 在经过一段足够的延迟后发布您的公告,或者基本上只需点击一下即可

    对于问题的第二部分(第一个可访问性问题正在集中) . 这可能是因为正在发生一些屏幕重新绘制,因此View绘图层次发布了一个固有的 UIAccessibilityScreenChangedNotification . 您应该通过自己发布此通知来覆盖此选项,并使用您希望突出显示的元素 . 可能是启动屏幕的元素发生更改,也可能是因此交互而添加的新内容 .

  • 0

    基于ChrisCM的answer above,实现了以下内容:

    if UIAccessibility.isVoiceOverRunning {
        DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
            UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "message")
        }
    }
    

相关问题