如何在tableview上为webview内容启用VoiceOver

时间:2017-11-16 08:11:23

标签: ios swift accessibility voiceover uiaccessibility

通常情况下,VoiceOver会正确读取加载了WKWebView的网页内容,并且可以阅读按钮和链接。

但是,当我在WKWebView上添加UITableViewCell并在UITableVIew中显示时,VoiceOver无法识别它。

根据apple的tableview文档,为了使UITableViewCell上的每个内容分别由VoiceOver识别, 有必要将单元格的isAccessibilityElement设置为false,并将isAccessibilityElement视图设置为真。

但如果isAccesibilityElement的{​​{1}}设置为true,则视图本身会被关注,我们无法识别内部网络内容。

此外,在加载Web内容后第一次启用WKWebView时,它会执行奇怪的行为,即可以识别Web内容。

我怀疑VoiceOver内容识别时间问题,我试过

VoiceOver

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)

加载网页内容后,但收不到好结果。

有没有一种方法可以处理UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil) wkwebview tableView的内容?

1 个答案:

答案 0 :(得分:1)

所以,我会解释你所看到的行为。从本质上讲,VoiceOver只会将第一个辅助功能元素集中在树中。因此,作为辅助功能元素的任何视图都不会将其子级作为辅助功能元素进行聚焦。

至于你的情况,我很好奇你的情况。我发现你可能需要提供更多细节。当我想象一个tableview时,我在一个视图中描绘了多个WKWebViews,这确实很奇怪。

webview的典型标记是将NOTHING设置为可访问性元素,并让WebView确定哪些元素可以访问。 WKWebView应该将HTML内容报告为适当的本机辅助功能元素。做任何其他事情都会破坏WKWebView的目标。但是,如果你在一个应用程序中有多个webview,这可能会搞砸。最终,如果它不按照我概述的方式工作(只是将事情单独留下,并将所有内容标记为“不是”可访问性元素),这将是一个错误,但是你必须处理的错误。

解决方案THEN将覆盖您的webview的UIAccessibilityContainer协议,并为其提供自定义反馈。不理想,会很痛苦。更多细节会有所帮助,但至少现在你可以更多地了解正在发生的事情了。

另一个简单的解决方案是,如果webview中的内容非常简单,您可以将accessibility元素设置为true,并通过accessibilityLabel,accessibilityValue和accessibilityTraits提供整个webview的内容描述。请确保您捕获所有信息,并且任何操作仍然可以操作!