禁用MKMapView上的辅助功能(VoiceOver)

问题描述 投票:1回答:2

我想要做的是禁用MKMapView上的辅助功能。实际上VoiceOver读取地图上的所有元素:道路,PO​​I ecc。 ECC。

所以我尝试了这个

[map setIsAccessibilityElement:NO]

但是不行......怎么做到这一点?我错过了什么?

ios accessibility voiceover
2个回答
2
投票

是的,的确,你错过了一些东西。这不是“isAccessibilityElemnt”属性的工作原理。通过将视图设置为不是辅助功能元素,您只是告诉VoiceOver忽略该视图,而不是该视图及其所有子视图。

你想要做的是写一个递归函数来为所有子视图设置“isAccessibilityElement”属性为no。我在史诗般的暴风雪中被VA抓住,没有我的mac。我刚刚开始使用Swift,但没有编译器,所以这是Swift(ish)伪代码。

func setA11yElementRecursive(view: UIView, toThis: bool) {
    view.isAccessibilityElement = toThis

    for (View v : view.subviews) {
        setA11yElementRecursive(v, toThis)
    }
}

免责声明:然而,这样做的含义是,您设置的每个元素都不是可访问性元素,VoiceOver(和任何其他AT)将假定您的视图对可访问性不重要。这意味着它将被完全忽略!任何人在您的应用程序上使用VoiceOver(或至少在此视图上)都会认为没有任何内容。您的应用将显示为空白画布。依赖VoiceOver阅读标签上的小字体的视力正常的用户将在UI上滑动元素,并且它们将显示为没有任何元素。他们会为什么在那里看到一个标签而感到困惑,但不能把它读出来。在提供信息的项目上将此属性设置为NO的情况非常少。即使你认为盲人不应该使用你的应用程序或你的应用程序的这个特定功能。


2
投票

由于`accessibilityElementsHidden'属性,您的'MKMapView'可能被视为一个容器,其元素不应被VoiceOver看到。

@IBOutlet weak var map: MKMapView!

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    map.accessibilityElementsHidden = true
}

使用上面代码片段中显示的此属性会禁用MKMapView上的VoiceOver。

© www.soinside.com 2019 - 2024. All rights reserved.