我有一个按钮可以切换显示的标签:
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
并且只有then call UIAccessibilityPostNotification
?或者有没有办法在用户点击按钮时禁止 VoiceOver 再次读取该按钮?
可以在此处查看示例项目:https://github.com/rajohns08/VoiceOverTest https://github.com/rajohns08/VoiceOverTest
您可以在按钮上设置以下属性,然后单击按钮时将不再再次读出该按钮:
button.accessibilityTraits += UIAccessibilityTraitStartsMediaSession
这告诉系统该按钮启动多媒体事件,并且在激活时不应说出任何内容。
Apple 的参考文档:https://developer.apple.com/documentation/uikit/uiaccessibilitytraits/1620173-startsmediasession https://developer.apple.com/documentation/uikit/uiaccessibilitytraits/1620173-startsmediasession
在您不想打断的媒体会话期间,使用此特征可以使辅助应用程序(例如 VoiceOver)的音频输出静音。例如,您可以使用此特征在用户录制音频时使 VoiceOver 语音静音。
关于在移动到其他元素之前等待元素完成阅读:我只能通过订阅此通知来了解如何等待公告完成:.UIAccessibilityAnnouncementDidFinish
当系统读出如下发送的公告时,效果很好:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, title)
但是,我无法弄清楚如何等待 LayoutChanged 和 ScreenChanged 等内容来完成阅读。他们不发出上述公告通知。如果您能弄清楚,请告诉我。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)