gpt4 book ai didi

iOS VoiceOver 在更改到下一个元素之前等待元素完成阅读

转载 作者:行者123 更新时间:2023-12-02 02:27:54 29 4
gpt4 key购买 nike

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

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)
}
}
}

点击按钮时,如果显示标签,我会激活该标签以供 VoiceOver 读取。问题是当用户点击按钮时,VoiceOver 会自动开始读取按钮的 accessibilityLabel。这会导致 VoiceOver 读取按钮的 accessibilityLabel 的一半,然后切换到读取标签的 accessibilityLabel(例如“您真的可以点击这个...这是一个标签”)。

有没有办法让我知道 VoiceOver 何时完成读取按钮的 accessibilityLabel 并且仅然后调用 UIAccessibilityPostNotification?或者有没有办法在用户点击按钮时禁止 VoiceOver 再次读取该按钮?

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

最佳答案

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

button.accessibilityTraits += UIAccessibilityTraitStartsMediaSession

这告诉系统该按钮启动多媒体事件,并且在激活时不应说出任何内容。

Apple 的引用文档:https://developer.apple.com/documentation/uikit/uiaccessibilitytraits/1620173-startsmediasession

Use this trait to silence the audio output of an assistive app, such as VoiceOver, during a media session that you don't want to interrupt. For example, you might use this trait to silence VoiceOver speech while the user is recording audio.

关于在移动到其他元素之前等待元素完成阅读:我只能通过订阅此通知来了解如何等待公告完成:.UIAccessibilityAnnouncementDidFinish

当系统读出如下发送的公告时,效果很好:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, title)

但是,我无法弄清楚如何等待 LayoutChanged 和 ScreenChanged 等内容来完成阅读。他们不发出上述公告通知。如果您能弄清楚,请告诉我。

关于iOS VoiceOver 在更改到下一个元素之前等待元素完成阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578888/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com