如何使VoiceOver可以访问基于表视图的选择器控件



我的应用程序中有一个基于UITableView的选择器控件。用户可以滚动表格视图,中心的标记显示所选项目。每个可选项都是一个表格视图单元格。

示例

现在我想让我的应用程序VoiceOver与朋友兼容。但是这个控制,我很难让它工作。

打开VoiceOver后,我无法滚动表格视图来选择其他元素。我在时钟应用程序中查看了选择器视图。它也不会滚动。但当你向上或向下轻弹时,它会跳到下一个或上一个值。上面写着

"用一个手指向上或向下滑动以调整值";。

我读了Matt Gammell的VoiceOver指南,他说提示必须说明控件做了什么,而不是你应该做什么。

所以我推断这是他们用来调整价值的一种特殊特征。但我找不到这样的特质。

既然UIPickerView是基于UITableViews的,苹果是如何让它与VoiceOver协同工作的?我必须使用手势识别器进行轻弹吗?

编辑

我正在UITableView子类上设置可调整特性,如下所示:

self.isAccessibilityElement = YES;
self.accessibilityLabel = @"Start date.";
self.accessibilityTraits = UIAccessibilityTraitAdjustable;

表格视图实现

- (void)accessibilityIncrement {
    NSLog(@"accessibilityIncrement");
}
- (void)accessibilityDecrement {
    NSLog(@"accessibilityDecrement");
}

现在我可以拖动单元格,VoiceOver将读取它们的标签并用黑色矩形标记它们。但是表视图不会滚动,上面的方法也不会被调用。

单元格本身是isAccessibilityElement = NO;,不实现可访问性操作方法。

您正在寻找可调整的特性:UIAccessibilityTraitAdjustable

如果在视图/单元格中指定此特性,则还必须在该视图/单元格内实现accessibilityIncrementaccessibilityDecrement。这是当用户用一根手指上下滑动时调用的两种方法。

不需要自己实现任何手势识别器。设置特征就足以获得该行为(它还将添加"用一个手指向上或向下滑动…"的描述)

UIAccessibilityTraitAdjustable添加到元素的特征中。然后执行-(void)accessibilityIncrement-(void)accessibilityDecrement操作。在日期选择器的情况下,您应该为每个组件(年、月、日期)执行此操作——每个组件都是一个元素(用户可以通过向左和向右轻弹VoiceOver光标来将其移动到该元素),并且每个组件都可以调整(通过在VoiceOver指针位于其上时向上/向下轻弹)。

最新更新