如何获得可访问性滑动以正确导航子视图集合?
Posted
技术标签:
【中文标题】如何获得可访问性滑动以正确导航子视图集合?【英文标题】:How can I get an accessibility swipe to navigate a collection of subviews correctly? 【发布时间】:2013-06-25 16:55:04 【问题描述】:Apple 打算用一个滑动手势按顺序在屏幕项目中移动 VoiceOver 光标,但我没有这样做,因为用户可以四处移动它们!
我的主视图有一组按钮和标签,但它也有两个自定义子视图集合,让我们从左到右按“升序”调用实例 SVA1 到 SVA9 和 SVB1 到 SVB9。也就是说,SVA 是一个自定义 UIView 类,而 SVB 是第二个。例如,当我将 SVA3 拖动到 SVA6 的当前位置时,我最终会得到 SVA1、SVA2、SVA4、SVA5、SVA3、SVA6、SVA7、SVA8 和 SVA9 的顺序。这些集合是“链接”的,因此现在也可以通过我的代码在 SVB 子视图集合中镜像相同的订单。
我的问题是向右滑动,期望 VoiceOver 在我在屏幕上看到我的项目时读出我的项目会导致不同的顺序。它得到了相当多的权利,但随后会突然将 VoiceOver 光标从第一个集合移动到第二个集合或改变它的方向。移动后,我的代码知道所有子视图的新顺序,但我希望能够将该信息传递给 VoiceOver。
每个自定义子视图都是一个accessibilityElement。有没有办法让 VoiceOver 按我期望的顺序读回我的项目?我遇到了 -accessibilityElementAtIndex: 方法,但不知道它是否或如何适合我的情况。
谢谢。
【问题讨论】:
【参考方案1】:如果您想更改顺序,那么accessibilityElementAtIndex:
和UIAccessibilityContainer
协议的其余部分就是您要找的。p>
假设您有一个名为 accessibleElements
的数组,它按照您希望它们出现的顺序存储元素。
- (NSInteger)accessibilityElementCount
return self.accessibleElements.count;
- (id)accessibilityElementAtIndex:(NSInteger)index
return self.accessibleElements[index];
- (NSInteger)indexOfAccessibilityElement:(id)element
return [self.accessibleElements indexOfObject:element];
容器本身不能是可访问性元素,因此您还应该覆盖 isAccessibilityElement
- (BOOL)isAccessibilityElement
return NO;
【讨论】:
从 ios 8 开始,您可以直接设置对象的accessibilityElements
而无需覆盖 accessibilityElementCount|ElementAtIndex:|IndexOfElement:
。以上是关于如何获得可访问性滑动以正确导航子视图集合?的主要内容,如果未能解决你的问题,请参考以下文章