iOS VoiceOver 等待元素完成阅读,然后再切换到下一个元素
Posted
技术标签:
【中文标题】iOS VoiceOver 等待元素完成阅读,然后再切换到下一个元素【英文标题】:iOS VoiceOver wait on element to finish reading before changing to next element 【发布时间】:2017-08-08 22:20:38 【问题描述】:我有一个可以切换显示标签的按钮:
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
【问题讨论】:
请问这些答案是否为您的问题提供了合适的解决方案? ?????? 【参考方案1】:你可以在按钮上设置如下属性,当按钮被点击时不再读出按钮:
button.accessibilityTraits += UIAccessibilityTraitStartsMediaSession
这告诉系统该按钮启动一个多媒体事件,并且在激活时它不应该说出任何内容。
关于在移动到其他元素之前等待元素完成阅读:我只能通过订阅此通知了解如何等待公告完成:.UIAccessibilityAnnouncementDidFinish
当系统读完这样发送的公告时,效果很好:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, title)
但是,我无法弄清楚如何等待 LayoutChanged 和 ScreenChanged 等内容才能完成阅读。他们不发送上述公告通知。如果你能弄清楚,请告诉我。
【讨论】:
一些关于 VoiceOver 公告结束的信息,如果需要的话 ⟹ ***.com/a/52459406/3825084 ?【参考方案2】:不幸的是,我的直觉(一个非常可引用的来源)说您不能也不应该检查和解决 VoiceOver 为响应用户导航或操作而生成的任何语音。在听到激活按钮的结果之前,用户不必等待按钮标签。也就是说,您可能会重新考虑使用如此长的按钮标签,并在 accessibilityHint
中包含额外信息,而不是在延迟后读取。
【讨论】:
... 除非用户自己在设置中未激活提示(设置-辅助功能-VoiceOver-Verbosity-SpeakHints)。 ?【参考方案3】:一种可能的方法是将accessibilityLabel 的内容拆分为更短的accessibilityLabel 和更长的accessibilityHint。
我认为长accessibilityLabel 的原因是需要为看不到屏幕的用户提供有关按钮操作的额外信息。
就像我们更喜欢简短的可见按钮标签,以便看到用户可以“快速看到”,画外音用户希望“快速听到”,所以保持accessibilityLabel 简短,并首先具有显着词是个好主意,因为阅读当用户继续前进时,标签会被打断。
如果焦点在按钮上停留足够长的时间,则会读取提示。
用户可以在设置中关闭语音提示,因此如果每次按下按钮时都传递信息至关重要,那么此解决方案将不起作用。正如 FranticRock 所建议的那样,您可能不得不依赖公告,也许再加上调度延迟。
了解用例会很有趣,也许这会带来更多想法!
【讨论】:
以上是关于iOS VoiceOver 等待元素完成阅读,然后再切换到下一个元素的主要内容,如果未能解决你的问题,请参考以下文章