Ios 在MKMapView上禁用辅助功能(画外音)

Ios 在MKMapView上禁用辅助功能(画外音),ios,accessibility,voiceover,Ios,Accessibility,Voiceover,我要做的是禁用MKMapView上的可访问性。 实际上,VoiceOver读取地图上的所有元素:道路、POI ecc。ecc 所以我试过这个 [map setIsAccessibilityElement:NO] 但不工作…如何实现这一点?我错过了什么?是的,的确,你错过了什么。“isAccessibilityElemnt”属性不是这样工作的。通过将视图设置为非可访问性元素,您只是告诉VoiceOver忽略该视图,而不是该视图及其所有子视图 您要做的是编写一个递归函数,将所有子视图的“isAcc

我要做的是禁用
MKMapView
上的可访问性。 实际上,
VoiceOver
读取地图上的所有元素:道路、POI ecc。ecc

所以我试过这个

[map setIsAccessibilityElement:NO]

但不工作…如何实现这一点?我错过了什么?

是的,的确,你错过了什么。“isAccessibilityElemnt”属性不是这样工作的。通过将视图设置为非可访问性元素,您只是告诉VoiceOver忽略该视图,而不是该视图及其所有子视图

您要做的是编写一个递归函数,将所有子视图的“isAccessibilityElement”属性设置为no。我被困在弗吉尼亚州史诗般的暴风雪中,没有我的mac电脑。我刚开始使用Swift,但没有编译器,所以这是Swift(ish)伪代码

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

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

免责声明:但是,这意味着,您设置为非可访问性元素的每个元素,VoiceOver(和任何其他AT)都将假定您的视图对可访问性不重要。这意味着它将被完全忽略!任何在你的应用程序上使用VoiceOver(或至少在此视图上)的人都会认为没有任何内容。您的应用程序将显示为空白画布。依靠画外音阅读标签上的小字的弱视用户将在用户界面上的元素上滑动,在他们看来,没有任何元素。他们会感到困惑,为什么他们会在那里看到一个标签,但却不能让人把它读给他们听。在极少数情况下,对显示信息的项目将此属性设置为“否”是合适的。即使您认为盲人不应该使用您的应用程序或应用程序的此特定功能。

您的“MKMapView”可能会被视为一个容器,由于该属性,VoiceOver不应看到其元素

@IBOutlet weak var map: MKMapView!

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

    map.accessibilityElementsHidden = true
}

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

为什么您如此急于使您的应用程序无法访问?因为地图信息与盲人无关,对于应用程序而言,您的声明中有太多的无知,我甚至不知道从何开始。盲人之外还有残疾,VoiceOver之外还有辅助工具,操作系统仍然依赖于这些信息的准确性。多亏了答案和免责声明,你不知道,但我的问题的原因是我想改善使用VoiceOver的盲人的用户体验。我的视图底部有一个按钮,用于执行关键任务,因此我希望使用VoiceOver的用户能够快速执行该操作。执行操作的替代方法并不意味着您应该阻止其他可用信息。5年来,我一直在对本机ios应用程序进行可访问性分析,我从未建议客户端将信息视图设置为对可访问性不重要。更不用说整个视图层次了。在一种情况下,这仅仅是有意义的,在模态对话框后面隐藏视图。但请记住,VoiceOver用户不仅仅通过左右滑动来导航;他们可以在屏幕上拖动手指,让手指下的内容大声朗读。如果地图不能正常工作,那将是一种令人困惑的体验。请告诉我如何才能仅为我的应用程序禁用画外音功能@圣诞