2016-11-11 2 views
1

Ich versuche, ein Feature zu implementieren, mit dem VoiceOver ein ausgewähltes HTML-Element lesen kann, das in einer WKWebView angezeigt wird.Verwenden von UIAccessibility zum Lesen der HTML-Auswahl

Mein erster Versuch abgeflachte die HTML in Text und verwendet dann AVSpeechSynthesizer() eine AVSpeechUtterance mit dem Text instanziiert zu lesen:

let synth = AVSpeechSynthesizer() 
let utterance = AVSpeechUtterance(string: myFlattenedText) 
if synth.isSpeaking { 
    synth.stopSpeaking(at: .immediate) 
} 
synth.speak(utterance) 

Dies funktioniert im Allgemeinen, aber die Erfahrung, dass Voiceover gibt überlegen ist. Zum Beispiel hat mein HTML die Erreichbarkeit aktiviert MathJax. VoiceOver liest die kontextbezogenen mathematischen Gleichungen gut, während die Strategie, den HTML-Code in den Text einzubetten, dies nicht tut.

Ich experimentierte mit der Erstellung einer NSAttributedString mit dem HTML-Fragment wie ausführlich here, aber das ist nicht besser.

Gibt es eine Möglichkeit, die VoiceOver-Funktionalität zu nutzen, vielleicht mithilfe von UIAccessibility, die den HTML-Code für Barrierefreiheit genauso wie VoiceOver liest?

+0

Ich _strongly_ vermute, dass Sie nur die Erfahrung erhalten, die Sie wollen, indem Sie eine Webansicht einbetten. – Justin

+0

Ich benutze eine Webansicht. Wenn der Benutzer Inhalt in der Webansicht auswählt, möchte ich den Inhalt für den Benutzer lesen. Ich könnte hier entweder eine js oder eine native Lösung verwenden, wenn es einen Unterschied macht. Mit einer js-Lösung konnte ich jedoch nichts erreichen. –

+0

Ich muss missverstanden haben. Warum können Benutzer nicht mithilfe von VoiceOver in der Webansicht navigieren? – Justin

Antwort

0

Was Sie sehen, ist WebKit MathJax Unterstützung gepaart mit sorgfältig erwogen UIAccessibility Unterstützung. Während die neueste Dokumentation, die ich gefunden habe, schlägt these properties are not accessible to web developers, als ein iOS-Entwickler, sollten Sie in der Lage sein, die UIAccessibility Elementhierarchie zu durchlaufen, um die accessibilityLabel und accessibilityValue Ihres MathJax Inhalt zu entleeren.

+0

Danke für den Vorschlag und den Link. Ich dachte, ich wäre auf dem Weg zu einer Lösung (eine temporäre Webview mit dem HTML aus der Auswahl), aber ich kann nicht scheinen, irgendwelche Accessibility-Eigenschaften aus diesem temporären Webview oder meine ursprüngliche Webview zu bekommen. 'accessibilityLabel',' accessibilityValue' und 'accessibilityElements' sind alle null. –

+0

@JonBrooks Hast du "accessibilityChildren" durchgespielt? – Justin

+0

Ich sehe nur eine 'accessibilityChildren' Eigenschaft in NSAccessibility nicht UIAccessibility. Ist es eine Eigenschaft auf etwas anderem als der Ansicht? –

Verwandte Themen