使用可访问性功能
VoiceOver会按照应用程序中元素的顺序读取它们。那么,有没有办法在元素之间移动焦点呢?我尝试使用"nextResponder",但是它没有起作用。
使用可访问性功能
VoiceOver会按照应用程序中元素的顺序读取它们。那么,有没有办法在元素之间移动焦点呢?我尝试使用"nextResponder",但是它没有起作用。
从iOS 6开始,您可以使用UIAccessibilityLayoutChangedNotification
将焦点设置到特定元素上,并传递该元素。
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, firstBottom);
但是,如果你试图完全改变“选项卡顺序”,我不知道有什么方法可以实现。
UIAccessibilityLayoutChangedNotification
从iOS 3开始就可用。在iOS 6中有什么变化? - David Rönnqvist我尝试使用UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, elementName);来改变不同元素的焦点。行为是焦点被转移到新元素,但Voice Over会首先宣布页面标题,然后才是新元素的可访问标签值。
自定义视图的可访问性:
您可以通过覆盖父视图的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