无障碍焦点

12

使用可访问性功能

VoiceOver会按照应用程序中元素的顺序读取它们。那么,有没有办法在元素之间移动焦点呢?我尝试使用"nextResponder",但是它没有起作用。


1
赏金!!耶!!我想知道(如果可能的话)如何告诉VoiceOver从UIToolbar中的最后一个UIToolBarButton跳转到主视图中的第一个对象,以便用户可以无限循环遍历屏幕上的所有控件... 可行吗? - nacho4d
编辑:UIToolbar中的最后一个按钮是整个屏幕中的最后一个控件,因此按下VO+rightArrow没有任何作用(通常按下VO+arrowRight会跳转到下一个控件,但由于这是最后一个控件,它会停止)。在这种情况下,我想告诉VoiceOver跳转到第一个对象,以便用户可以无限循环地浏览屏幕上的所有控件。希望现在解释得更清楚了 :) - nacho4d
5个回答

4

从iOS 6开始,您可以使用UIAccessibilityLayoutChangedNotification将焦点设置到特定元素上,并传递该元素。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstBottom);

但是,如果你试图完全改变“选项卡顺序”,我不知道有什么方法可以实现。


据我所知,UIAccessibilityLayoutChangedNotification从iOS 3开始就可用。在iOS 6中有什么变化? - David Rönnqvist
如果您查看旧文档,它会说“此通知不包括参数。”我被告知在iOS 6之前它被忽略了。 - David Dunham
当布局发生变化时,应该发布一个布局变更通知,正如其名称所示。它不应该仅用于将焦点移动到元素上。 - Kasper Munck
我认为没有其他方法可以聚焦于一个元素。通常,当屏幕已经改变,并且您希望焦点开始在特定元素上时,您会使用它。 - David Dunham
1
使用self.accessibilityElements = @[item1,item2..]; 来改变iOS的可访问性焦点。https://dev59.com/oWsz5IYBdhLWcg3w-89v - Rushabh
显示剩余2条评论

0
这可能有点冒险,但你有尝试根据需要更改accessibilityLabel或accessibilityHint吗?如果你可以欺骗VoiceOver相信文本已经更改,我期望它会适当地改变焦点。
时间是困难的部分,因为似乎没有任何委托回调来告诉你VoiceOver正在遍历你的视图,所以你可能需要估计要更新可访问性提示/值之前要经过多长时间。
最后一个想法是使用UIAccessibilityTraitUpdatesFrequently可访问性特征标记你想要引起注意的UIView。那可能是除了利用隐藏的苹果库之外,你能得到的最接近的东西。

0

查看此篇文章,了解如何处理语音播报的特殊元素排序。我刚在我正在开发的应用中使用了这种方法。


0

我尝试使用UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, elementName);来改变不同元素的焦点。行为是焦点被转移到新元素,但Voice Over会首先宣布页面标题,然后才是新元素的可访问标签值。


0

自定义视图的可访问性:

您可以通过覆盖父视图的accessibilityElements属性来自定义顺序(VoiceOver遍历屏幕元素的顺序)。

self.accessibilityElements = [childView1, childView2, childView3]

随着语音提示的出现,顺序将如下所示:childView1 -> childView2 -> childView3

通过编程更改可访问性焦点到其他元素:

您可以随时使用以下代码将焦点转移到另一个元素。

UIAccessibility.post(notification: .layoutChanged, argument: childView2)

使用上述代码,语音焦点将转移到childView2,然后按照accessibilityElements定义的相同顺序进行,即childView2 -> childView3 -> childView1...等等

自定义复杂视图的可访问性顺序:

您可以进一步自定义它。如果一个视图有多个子视图和更多的孙子视图,则可以通过使用所有子视图的accessibilityElements来定义主父视图的accessibilityElements来实现可访问性顺序。

例如,对于下面的视图层次结构,我们有
View Controller Example

为了为这些视图定义自定义的可访问性元素顺序,我们可以以下列方式定义。

var customElements = childView1.accessibilityElements
customElements.append(contentsOf: childView2.accessibilityElements)
customElements.append(contentsOf: childView3.accessibilityElements)

parentView.accessibilityElements = customElements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接