12

使用辅助功能

当 VoiceOver 按顺序读取应用程序中的元素时,有没有办法在元素之间转移焦点?我尝试使用“nextResponder”,但它不起作用。

4

5 回答 5

4

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

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstBottom);

但如果你想完全改变“标签顺序”,我不知道有什么办法。

于 2013-01-03T21:41:06.207 回答
0

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

于 2013-08-08T17:25:56.200 回答
0

这是在黑暗中拍摄的,但是当您希望更改订单时,您是否尝试过更改accessibilityLabel 或accessibilityHint?如果您可以欺骗 VoiceOver 相信文本已更改,我希望它会适当地更改焦点。

时间安排将是困难的部分,因为当 VoiceOver 爬取您的视图时,似乎没有任何委托回调,因此您可能必须在尝试更新可访问性提示/值之前估计要经过的时间。

我最后的想法是用可访问性特征标记您想要引起注意的 UIView UIAccessibilityTraitUpdatesFrequently。这可能是您在不利用隐藏的 Apple 库的情况下可以获得的最接近的结果。

于 2012-04-19T13:43:12.483 回答
0

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

于 2016-07-14T19:38:21.143 回答
0

自定义视图的辅助功能:

accessibilityElements您可以通过以下方式覆盖父视图的属性来自定义顺序(画外音应该遍历屏幕元素) 。

self.accessibilityElements = [childView1, childView2, childView3]

随着那个画外音将遵循像这样的序列childView1 -> childView2 -> childView3

以编程方式将辅助功能焦点更改为其他元素:

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

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

使用上面的代码,语音焦点将转移到childView2,然后将遵循accessibilityElementsie定义的相同顺序childView2 -> childView3 -> childView1... and so on

自定义复杂视图的辅助功能顺序:

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

例如,对于下面的视图层次结构,我们有
视图控制器示例

要为此类视图定义可访问性元素的自定义顺序,我们可以按以下方式定义。

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

parentView.accessibilityElements = customElements
于 2020-10-07T08:53:42.000 回答