Добавление подпредставления в пользовательский viewForHeaderInSection нарушает навигацию VoiceOver - PullRequest
6 голосов
/ 31 января 2012

У меня есть UITableViewController, и я пытаюсь настроить заголовки разделов, чтобы они больше походили на обычный текст. Я обнаружил, что когда я добавляю подпредставление в пользовательский headerView (подробно описано ниже), оно нарушает навигацию заголовка VoiceOver.

Например: скажем, у меня есть таблица с тремя заголовками: Заголовок1, Заголовок2, Заголовок3.

Без пользовательской реализации метода 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 ]

1 голос
/ 04 мая 2013

Это вряд ли ответ на первоначальную проблему, но я только что обошел похожую проблему.

У меня был пользовательский UIView для заголовков разделов, я хранил их в массиве и иногда использовал их. Это полностью запутало VoiceOvery, и движение вперед или назад не всегда приводило к выбору предыдущей или следующей ячейки, как и ожидалось.

Однако, когда я переходил к созданию нового UIView каждый раз, когда вызывался tableView: viewForHeaderInSection:, это путаница навигации VoiceOver прекратилась, и все работало хорошо. Мои представления заголовка доступны (isAccessibleElement) и имеют набор меток.

0 голосов
/ 21 июня 2019

Я работал над подобной проблемой

headerLabel.accessibilityTraits = [.header]

(код Swift)

...