6

我有一个 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 做出如此反应的想法都将不胜感激。

谢谢。

4

2 回答 2

1

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

我为节标题定制了 UIView,并将这些池保存在一个数组中,并偶尔重用它们。这完全混淆了 VoiceOvery,前进或后退并不总是按预期选择上一个或下一个单元格。

但是,当我更改为每次调用 tableView:viewForHeaderInSection: 时都创建一个新的 UIView 时,VoiceOver 的导航混乱停止了,并且一切正常。我的标题视图是可访问的 (isAccessibleElement) 并且有一个标签集。

于 2013-05-04T13:04:15.517 回答
0

我解决了一个类似的问题

headerLabel.accessibilityTraits = [.header]

(SWIFT代码)

于 2019-06-21T04:47:12.157 回答