辅助功能焦点

时间:2012-04-11 05:12:05

标签: iphone ios focus accessibility voiceover

使用辅助功能

虽然VoiceOver按顺序读取应用程序中的元素,但无论如何都要将焦点转移到元素之间? 我尝试使用" nextResponder"但它无效。

4 个答案:

答案 0 :(得分:0)

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

时机将是困难的部分,因为当VoiceOver抓取您的视图时,似乎没有任何委托回调,因此您可能必须在尝试更新辅助功能提示/值之前估计通过的时间。

我最后的想法是用你的UIAccessibilityTraitUpdatesFrequently辅助功能特征来标记你想引起注意的UIView。如果不点击隐藏的Apple库,这可能是最接近的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

视图的自定义辅助功能:

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

self.accessibilityElements = [childView1, childView2, childView3]

这样,话音将遵循childView1 -> childView2 -> childView3之类的顺序。

以编程方式将可访问性焦点更改为其他元素:

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

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

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

为复杂视图定制可访问性顺序:

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

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

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

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

parentView.accessibilityElements = customElements