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

时间:2016-01-25 12:32:57

标签: ios accessibility voiceover

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

所以我试过这个

[map setIsAccessibilityElement:NO]

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

2 个答案:

答案 0 :(得分:2)

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

你想要做的是写一个递归函数来设置" isAccessibilityElement"所有子视图的属性为否。我在史诗般的暴风雪中被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的情况非常少。即使你认为盲人不应该使用你的应用程序或应用程序的这个特定功能。

答案 1 :(得分:1)

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

@IBOutlet weak var map: MKMapView!

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

    map.accessibilityElementsHidden = true
}

使用上面的代码段所示的此属性,在MKMapView上禁用VoiceOver