2017-11-16 23 views
2

일반적으로 VoiceOverWKWebView으로로드 된 웹 콘텐츠를 올바르게 읽고 버튼과 링크를 읽을 수 있습니다.테이블 뷰에서 webview 콘텐츠 용 VoiceOver를 활성화하려면 어떻게합니까

그러나 WKWebViewUITableViewCell에 추가하고 UITableVIew에 표시하면 VoiceOver은 인식 할 수 없습니다. 별도로 VoiceOver 인식 UITableViewCell의 각 컨텐츠를 만들기 위해 사과의있는 tableview 문서에 따르면

는 이 false로 셀의 isAccessibilityElement을 설정하는 것이 필요하며, 뷰의 isAccessibilityElement이 사실로 인식 할 수 있도록 설정합니다.

이 true로 설정되면보기 자체에 초점이 맞추어지며 내부 웹 콘텐츠를 인식 할 수 없습니다.

또한 웹 콘텐츠를로드 한 후 VoiceOver을 처음 사용하도록 설정 한 경우 웹 콘텐츠를 인식 할 수있는 이상한 동작이 수행되었습니다.

은 내가 웹 콘텐츠를로드 한 후
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil) 

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil) 

또는

를 실행 시도, VoiceOver 컨텐츠 인식 타이밍의 문제를 의심하지만, 그것은 좋은 결과를 얻을하지 않았다.

tableView ~ VoiceOver에 내용을 처리하는 좋은 방법이 있습니까?

+0

이 accessibilty가있는 UITableViewCell 및 WKWebview를 사용할 수 있습니까? yourTableView.isAccessibilityElement = true를 설정해야 할 수도 있습니다. yourWebView.isAccessibilityElement = true – Nagarjun

+0

아니요, 그렇지 않습니다. [이 문서] (https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html)를 참조하고 셀에''isAccessibilityElement = false'''를 설정합니다 셀의 개별 요소에 대한 액세스 가능성을 설정합니다. 또한 WKWebView의 isAccessibilityElement를 true로 설정하면 WebView 자체가 웹 콘텐츠 자체가 아닌 WebView 자체에 초점을 맞 춥니 다. 이는 바람직하지 않은 결과입니다. – mrqb335

+0

그건 그렇고, cell과 webview의 isAccessibilityElement를 true로 설정하려고 시도했지만 예상대로 작동하지 않았습니다. – mrqb335

답변

1

그래서 나는 당신이 보는 행동을 설명 할 것입니다. 기본적으로 VoiceOver는 트리의 첫 번째 접근성 요소에만 초점을 맞 춥니 다. 따라서 접근성 요소 인 모든보기에는 접근성 요소 인 자식이 집중되지 않습니다.

이제 귀하의 상황에 관해서는 귀하의 시나리오에 대해 궁금합니다. 나는 그것이 당신이 더 많은 세부 사항을 제공 할 필요가 있음을 알게된다. 내가 테이블 뷰를 그릴 때, 하나의 뷰에서 여러 개의 WKWebView를 볼 수 있는데, 실제로 이상하게 보일 것입니다.

웹보기의 일반적인 마크 업은 NOTHING을 액세스 가능성 요소로 설정하고 WebView에서 액세스 가능한 요소를 결정하도록하는 것입니다. WKWebView는 HTML 컨텐트를 네이티브 접근성 요소로보고해야합니다. 다른 일을하려면 WKWebView가 무엇을하는지 손상 시키십시오. 그러나 한 앱에서 여러 웹보기를 사용하는 경우 문제가 발생할 수 있습니다. 궁극적으로, 내가 설명했던 방식으로 작동하지 않는다면 (단지 물건 만 남겨두고 모든 것을 "접근성 요소가 아닌"것으로 표시하는 것), 이것은 버그 일 뿐이지 만, 당신이 처리해야 할 버그 일 것입니다.

솔루션 THEN은 웹보기에 대한 UIAccessibilityContainer 프로토콜을 재정의하고 사용자 정의 피드백을 제공합니다. 이상적이지는 않으나 고통 스러울 것입니다. 더 자세한 내용이 도움이 될 것이지만, 적어도 이제는 무슨 일이 일어나고 있는지 조금 더 이해할 수 있습니다.

또 다른 간단한 해결책은 웹보기의 콘텐츠가 매우 단순한 경우 accessibilityLabel, accessibilityValue 및 accessibilityTraits를 통해 accessibility 요소를 true로 설정하고 전체 웹보기에 대한 콘텐츠에 대한 설명을 제공하는 것입니다. 단지 당신이 모든 정보를 잡았는지, 그리고 어떤 행동이 여전히 실행 가능한지 확인하십시오!

0

ChrisCM의 답변을 통해 문제를 해결 한 방법은 다음과 같습니다. 기본적으로 UIAccessibilityContainer 프로토콜을 구현했지만 모든 메소드를 포함하는 webview에 전달하고 webview에 작업을 보냅니다.

이 기능을 사용하려면 포함 된보기 (UITableViewCell)와 웹보기 모두 isAccessibilityElementfalse이어야합니다.

내 코드 :

extension MyContainingView { 
    override public func accessibilityElementCount() -> Int { 
     return webview.accessibilityElementCount() 
    } 

    override public func accessibilityElement(at index: Int) -> Any? { 
     return webview.accessibilityElement(at: index) 
    } 


    override public func index(ofAccessibilityElement element: Any) -> Int { 
     return webview.index(ofAccessibilityElement: element) 
    } 


    override public var accessibilityElements: [Any]? { 
     get { 
      return webview.accessibilityElements 
     } 
     set { 
      webview.accessibilityElements = newValue 
     } 
    } 


    @available(iOS 11.0, *) 
    override public var accessibilityContainerType: UIAccessibilityContainerType { 
     get { 
      return webview.accessibilityContainerType 
     } 

     set { 
      webview.accessibilityContainerType = newValue 
     } 
    } 
} 
+0

https://stackoverflow.com/questions/48726916/how-to-delegate-voice-over-control-from-uiwindow-element-to-viewcontroller-subvi –

+0

내 문제는 귀하의 문제와 관련이 있습니다. 귀하의 솔루션과 나는이 며칠 동안 붙어 있습니다. 직계 부모 및 webview에 대한 접근성을 비활성화하고 부모에게 코드를 추가했지만 작동하지 않았습니다. rootview 컨트롤러에 대한 접근성을 비활성화해야합니까 ?? –