我有一个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如此反应的想法都会受到赞赏。
感谢。
答案 0 :(得分:1)
这不太可能是原始问题的答案,但我只是解决了类似的问题。
我为节标题设置了自定义UIView,并在数组中保留了这些节点,并重新使用它们。完全混淆VoiceOvery,前进或后退并不总是导致按预期选择上一个或下一个单元格。
然而,当我每次调用tableView:viewForHeaderInSection:之后我改变为创建一个新的UIView时,VoiceOver的导航混乱停止了,并且一切运行良好。 我的标题视图是可访问的(isAccessibleElement)并且具有标签集。
答案 1 :(得分:0)
我解决了类似的问题,
headerLabel.accessibilityTraits = [.header]
(快捷代码)