Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用UIAccessibility读取HTML选择_Ios_Swift_Voiceover_Uiaccessibility_Avspeechsynthesizer - Fatal编程技术网

Ios 使用UIAccessibility读取HTML选择

Ios 使用UIAccessibility读取HTML选择,ios,swift,voiceover,uiaccessibility,avspeechsynthesizer,Ios,Swift,Voiceover,Uiaccessibility,Avspeechsynthesizer,我正在尝试实现一个功能,该功能将使用VoiceOver来读取WKWebView中显示的选定HTML片段 我最初尝试将html展平为文本,然后使用AVSpeechSynthesizer()读取用文本实例化的avspeechoutance: let synth = AVSpeechSynthesizer() let utterance = AVSpeechUtterance(string: myFlattenedText) if synth.isSpeaking { synth.stopSp

我正在尝试实现一个功能,该功能将使用VoiceOver来读取
WKWebView
中显示的选定HTML片段

我最初尝试将html展平为文本,然后使用
AVSpeechSynthesizer()
读取用文本实例化的
avspeechoutance

let synth = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: myFlattenedText)
if synth.isSpeaking {
    synth.stopSpeaking(at: .immediate)
}
synth.speak(utterance)  
这通常是可行的,但画外音提供的体验更为优越。例如,我的HTML启用了可访问性。VoiceOver在阅读上下文数学公式方面做得很好,而将html扁平化为文本的策略则不行

我尝试过用html片段创建一个
NSAttributedString
,但效果并不好


有没有一种方法可以利用VoiceOver功能,或许可以使用
UIAccessibility
以VoiceOver相同的方式读取支持辅助功能的HTML?

您看到的是WebKit的
MathJax
支持与仔细考虑的
UIAccessibility
支持相结合。虽然我发现的最新文档表明,作为一名iOS开发人员,您应该能够遍历
UIAccessibility
元素层次结构,以转储
MathJax
内容的
accessibilityLabel
accessibilityValue


编辑:正如@mattsven所指出的,问题在于WKWebView内容是在远程进程中呈现的,因此不会将其可访问性元素公开给包含的应用程序。

您看到的是WebKit的
MathJax
支持与仔细考虑的
UIAccessibility
支持相结合。虽然我发现的最新文档表明,作为一名iOS开发人员,您应该能够遍历
UIAccessibility
元素层次结构,以转储
MathJax
内容的
accessibilityLabel
accessibilityValue


编辑:正如@mattsven指出的,问题在于WKWebView内容是在远程进程中呈现的,因此不会将其可访问性元素公开给包含该内容的应用程序。

我强烈怀疑,只有嵌入web视图,您才能获得所需的体验。我使用的是webview。当用户在webview中选择内容时,我想将内容读给用户。如果有区别的话,我可以在这里使用js或本机解决方案。不过,我无法用js解决方案取得任何进展。我一定是误解了。为什么用户不能使用VoiceOver浏览web视图?使用VoiceOver效果很好。我们的应用程序还允许用户通过菜单命令选择和阅读。我对这个功能不感兴趣,但我不这么认为:)我强烈怀疑,只有嵌入一个web视图,你才能获得你想要的体验。我使用的是一个web视图。当用户在webview中选择内容时,我想将内容读给用户。如果有区别的话,我可以在这里使用js或本机解决方案。不过,我无法用js解决方案取得任何进展。我一定是误解了。为什么用户不能使用VoiceOver浏览web视图?使用VoiceOver效果很好。我们的应用程序还允许用户通过菜单命令选择和阅读。我对这个功能不感兴趣,但我不打电话:)谢谢你的建议和链接。我以为我已经找到了一个解决方案(使用所选的html创建一个临时webview),但我似乎无法从这个临时webview或我的原始webview中获得任何可访问性属性
accessibilityLabel
accessibilityValue
accessibilityElements
都为零。@JonBrooks让您递归通过
accessibilityChildren
?我在NSAccessibility not UIAccessibility中只看到
accessibilityChildren
属性。“它是不是在风景之外的东西上的财产?”琼布鲁克斯喊道。我的意思是建议你尝试一下,你似乎是这么做的。让我做一些实验。好奇的更新:
WKWebView
通过远程进程渲染,其可访问性元素可以通过您的代码访问。感谢您的建议和链接。我以为我已经找到了一个解决方案(使用所选的html创建一个临时webview),但我似乎无法从这个临时webview或我的原始webview中获得任何可访问性属性
accessibilityLabel
accessibilityValue
accessibilityElements
都为零。@JonBrooks让您递归通过
accessibilityChildren
?我在NSAccessibility not UIAccessibility中只看到
accessibilityChildren
属性。“它是不是在风景之外的东西上的财产?”琼布鲁克斯喊道。我的意思是建议你尝试一下,你似乎是这么做的。让我做一些实验。好奇的更新:
WKWebView
通过远程进程渲染,其可访问性元素可以通过代码访问。