将子视图添加到自定义viewForHeaderInSection会中断VoiceOver导航

时间:2012-01-30 20:51:09

标签: ios uitableview ios5 voiceover

我有一个UITableViewController,我试图自定义节标题看起来更像纯文本。我发现当我向自定义headerView添加子视图(详见下文)时,它会破坏VoiceOver标题导航。

例如:假设我有一个包含三个标题的表:Header1,Header2,Header3。

如果没有viewForHeaderInSection方法的自定义实现,我可以将画外音转子切换为按标题导航,一切都按预期工作。

当我按照以下方式实现viewForHeaderInSection方法时,我可以从Header1移动到Header2到Header3并返回到Header2,但是然后画外音丢失了所有标题(说“找不到标题”)。

当我将headerLabel作为子视图添加到headerView时,我发现问题就出现了。我已经尝试将headerLabel设置为隐藏的辅助功能元素,因此画外音不会提取它,但问题仍然存在。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{

UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0,0,tableView.frame.size.width,30)];

UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 0, headerView.frame.size.width-120.0, headerView.frame.size.height)];

headerLabel.textAlignment = UITextAlignmentLeft;
headerLabel.font = [UIFont boldSystemFontOfSize:22];
headerLabel.text = [headersArray objectAtIndex:section];
headerLabel.backgroundColor = [UIColor clearColor];

[headerView addSubview:headerLabel];

return headerView;

}

任何有关VoiceOver如此反应的想法都会受到赞赏。

感谢。

2 个答案:

答案 0 :(得分:1)

这不太可能是原始问题的答案,但我只是解决了类似的问题。

我为节标题设置了自定义UIView,并在数组中保留了这些节点,并重新使用它们。完全混淆VoiceOvery,前进或后退并不总是导致按预期选择上一个或下一个单元格。

然而,当我每次调用tableView:viewForHeaderInSection:之后我改变为创建一个新的UIView时,VoiceOver的导航混乱停止了,并且一切运行良好。 我的标题视图是可访问的(isAccessibleElement)并且具有标签集。

答案 1 :(得分:0)

我解决了类似的问题,

headerLabel.accessibilityTraits = [.header]

(快捷代码)