Set all elements in a ViewController to not be read by VoiceOver
我正在寻找一种方法来告诉 VoiceOver 不要读取整个 ViewController 的元素。原因是,我有一个按钮,当按下它时,会在屏幕上显示一个模态的 VC。我说modal-ish,因为它不是modal,而是一个自定义的VC,里面有一个自定义的动画,实际上并没有覆盖整个屏幕,所以新的VC和旧的VC同时在视图中并保持在内存中。
当用户用两根手指滑动阅读屏幕上的所有元素时,VoiceOver 将首先阅读我的新 VC 中的元素,就像它应该的那样,然后它会开始阅读这个 VC 后面现在”隐藏”的元素” (在引号中,因为它们没有以编程方式设置为隐藏,只是因为 VC 覆盖了它们而被隐藏)并且不应该被阅读。
有什么简单的方法可以让 VoiceOver 跳过整个旧 VC?或者我是否必须逐个元素地检查,并将 isAccessibilityElement 设置为 NO,然后在覆盖 VC 被解除时返回 YES?
如果您想跳过特定元素的配音,则必须禁用该元素的可访问性(如果它已在情节提要中设置),否则您必须以编程方式进行。您必须设置 IsAccessibilityElement to NO,以使语音跳过该元素。
还有另一种方法可以做到这一点。您必须创建一个数组并提供您希望语音读取的元素,因此当您希望将此数组提供给:accessibilityElements 时,语音 ovr 将只读取您在数组中提供的元素。您可以随时根据需要修改数组。
- 那么有没有简单的方法可以将此功能添加到应用程序中?使用数组作为可访问性元素的完全重构(不幸的是,这项任务远远超出了我试图修复的错误的范围,我们有成千上万个不同的视图控制器正在使用)或者一个-by-one 将它们设置为不可访问元素。我希望苹果能让这件事变得更容易一些。
- @BillL:您确实在没有模式视图的情况下使您的实现过于复杂,因为它本来是一个简单的解决方案。否则,除了 Teja 提供的解决方案之外,我看不到任何其他解决方案。
来源:https://www.codenong.com/32783664/