【问题标题】:How can I queue multiple accessibility notifications for VoiceOver?如何为 VoiceOver 排队多个辅助功能通知?
【发布时间】:2018-08-07 17:15:45
【问题描述】:

这就是我通知系统读出我的元素的方式:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, cell)

问题是当我发送多个通知时,已经在阅读的通知被打断了!我希望能够排队...

我还在另一个问题中发现我应该使用属性字符串:

attributedString.addAttribute(NSAttributedStringKey(
    rawValue: UIAccessibilitySpeechAttributeQueueAnnouncement), 
    value: true, 
    range: range!.nsRange)

我在这里错过了什么?

【问题讨论】:

    标签: ios swift uiaccessibility


    【解决方案1】:

    我在这里错过了什么?

    我进行了许多测试,试图了解这种让我发疯的行为。

    我的结论是,如果您在 VoiceOver 说出 {label/hint/value} 时发送通知,您的通知将不会被考虑在内:当系统需要发出某个属性时可能存在一种抢占的焦点元素。

    只有在发声结束时,您才能发布任意数量的通知,以便根据需要进行良好分析和解释。

    UIAccessibilitySpeechAttributeQueueAnnouncement 键仅在系统不需要接管时对您自己的通知有用。

    如果您发送了许多通知,并且例如用户轻弹以聚焦一个新元素,那么一旦系统发出元素的属性,未发出声音的通知就会被删除。

    在这种情况下,如果您捕捉到UIAccessibilityAnnouncementDidFinish 事件,您将在最后一次发声通知 (UIAccessibilityAnnouncementKeyStringValue) 的 UIAccessibilityAnnouncementKeyWasSuccessful 键上获得一个错误值...以下所有的都将被忽略,没有观察者提供的信息。

    结论:当出现新的焦点元素或屏幕/布局更改通知时,VoiceOver 不会考虑个人通知

    如何将 VoiceOver 的多个辅助功能通知排队?

    根据上面公开的内容,我建议设置一种重试机制,在通知未完全收到时仍会发送您的通知(x 次)例如,在 y 秒后。
    这可能是一种更确定通知是否被完美接收的棘手方法。

    【讨论】:

      【解决方案2】:

      使用 Swift 5 这对我有用:

      if (UIAccessibility.isVoiceOverRunning) {
           let message: NSAttributedString = NSAttributedString(string: "read me", attributes: [.accessibilitySpeechQueueAnnouncement: true])
           UIAccessibility.post(notification: .announcement, argument: message)
      }
      

      关键是设置.accessibilitySpeechQueueAnnouncement为真。

      【讨论】:

        【解决方案3】:

        UIAccessibilityAnnouncementNotification 应该在应用需要向用户发布临时通知时使用。它可能不是为了重复调用而设计的。

        如果您确实想排队,您可能需要发布第一个通知,然后等待系统发布UIAccessibilityAnnouncementDidFinishNotification,然后您可以在队列中发布下一条消息。

        (但我要提醒一下:这真的是视障用户所期望的吗?)

        【讨论】:

        • 我尝试监听 UIAccessibilityAnnouncementNotification 但当我发布通知通知时它从未被调用...
        • 之所以需要公告,是因为这是为了聊天会话(对方回复时,我们需要以公告的形式通知)
        【解决方案4】:

        您可以尝试将https://github.com/spanage/AccessibilityAnnouncer 用于您自己的通知,但请记住,如果用户点击并与屏幕进行交互,这些通知将被忽略。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-06
          • 2018-02-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多