IOS画外音在更改到下一个元素之前等待元素完成读取

iOS VoiceOver wait on element to finish reading before changing to next element(IOS画外音在更改到下一个元素之前等待元素完成读取)

本文介绍了IOS画外音在更改到下一个元素之前等待元素完成读取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个可以切换所显示标签的按钮:

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var button: UIButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        button.accessibilityLabel = "You can tap this really long string that i'm testing"
        label.accessibilityLabel = "This is a label"
    }

    @IBAction func buttonTapped(_ sender: UIButton) {
        label.isHidden = !label.isHidden
        if !label.isHidden {
            UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, label)
        }
    }
}

轻触按钮时,如果显示标签,我将激活要由画外音读取的标签。问题是当用户点击按钮时,画外音会自动开始读取按钮的accessibilityLabel。这导致画外音在切换到读取标签的accessibilityLabel之前读取按钮的accessibilityLabel的一半(例如"您真的可以点击这个……这是一个标签")。

是否有一种方法可以让我知道画外音何时完成读取按钮的accessibilityLabel,并且只有然后调用UIAccessibilityPostNotification?或者,有没有办法在用户点击按钮时禁止画外音再次读取该按钮?

此处可以看到示例项目:https://github.com/rajohns08/VoiceOverTest

推荐答案

您可以在按钮上设置以下属性,点击按钮时按钮将不再再次读出:

button.accessibilityTraits += UIAccessibilityTraitStartsMediaSession

这会告诉系统该按钮启动了一个多媒体事件,并且在激活时它应该不会发出任何声音。

关于在移动到其他元素之前等待元素完成读取的问题:通过订阅此通知:.UIAccessibilityAnnouncementDidFinish

,我只能了解如何等待通知完成:.UIAccessibilityAnnouncementDidFinish

当系统读出像这样发送的通知时,它可以很好地工作:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, title)

然而,我不知道如何等待像LayoutChanged和ScreenChanged这样的东西来完成阅读。他们不会发出上述公告通知。如果你能弄清楚,请告诉我。

这篇关于IOS画外音在更改到下一个元素之前等待元素完成读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:IOS画外音在更改到下一个元素之前等待元素完成读取