2

如何在 UITableView 中的自定义部分标题视图上设置可访问性标识符?

作为背景,由于在 UIAutomation 中记录表视图的元素树会生成与表组元素 (UIATableGroup) 混合的表单元格 (UIATableCell 实例) 的平面列表,因此能够识别组可以更容易地识别属于那些的单元格组(因为它们按顺序返回)。

如果我在作为节标题视图返回的自定义视图上显式设置了accessibilityIdentifier,我可以确认该视图上确实设置了accessibilityIdentifier 属性。

这是提供自定义部分标题视图的方法(当然,它确实显示在我的实际表格视图中):

 - (UIView *)tableView:(UITableView *)tableView 
viewForHeaderInSection:(NSInteger)sectionNumber
{
    UIView *headerView = [self someMethodToRetrieveHeaderView];

    // This line is logging that indeed, the accessibility identifier is set.
    NSLog(@"Header view accessibility identifier is: '%@' for section number: %d",
     headerView.accessibilityIdentifier, sectionNumber);         
    return headerView;
}

问题在于,当我logElementTree()在针对此表视图的 UIAutomation 测试中使用 JavaScript 发出调用时,它会返回一个 UIATableGroup 元素,该元素的名称源自该部分标题视图内的文本内容(即回退到 UIAccessibilityLabel 启发式)。因为该节标题中有一个分段控件,所以我得到不一致的可访问性标签值。因此,我希望绕过所有这些并分配一个明确的标识符。

如何强制我自己的显式可访问性标识符显示为 UIATableGroup 的 name 属性?

4

1 回答 1

4

您必须确保您返回的视图也isAccessibilityElement响应YES. 我可以通过试验 Apple 提供的核心数据手册示例应用程序来解决这个问题。

我实现了一个自定义视图,如下所示:

static int counter = 0;

@interface MyView : UIView
@end

@implementation MyView

- (NSString *)accessibilityIdentifier
{
    return [NSString stringWithFormat:@"Custom Identifier %d", counter++];
}

- (BOOL)isAccessibilityElement
{
    return YES;
}

@end

然后我将它返回给表视图委托(在这种情况下是表视图控制器):

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    MyView *v = [[MyView alloc] init];
    return v;
}

我认为正在发生的事情是可访问性基础设施正在查看标题视图并试图获取第一个子视图的“标识符”,该子视图表示它确实是一个可访问性元素。因此,在您的情况下,分段控件正在返回YESisAccessibilityElement因此该标识符是应该公开的可访问性 API 的触发器。

因此,解决方案是确保除了返回自定义标识符之外,UIView您还返回作为标头返回到该方法的方法。YES

于 2012-12-31T20:17:42.000 回答