Объедините UISwitch и UITableViewCell для взаимодействия VoiceOver

В Календаре, когда вы создаете новое событие, если вы нажмете на ячейку "Весь день" с включенным VoiceOver, Siri говорит: "Кнопка включения / выключения на весь день, дважды нажмите, чтобы изменить настройку". И действительно, двойное нажатие переключит переключатель. Кроме того, невозможно нажать только на сам тумблер - вам нужно взаимодействовать с самой ячейкой, чтобы переключить сам переключатель, сам переключатель не является доступным элементом.

В моем приложении у меня точно такая же настройка с меткой и переключателем. Но когда я касаюсь ячейки с включенной функцией VoiceOver, она только читает метку, поэтому слепой пользователь даже не подозревает, что в этой ячейке есть тумблер. Если они касаются самого переключателя, то они могут взаимодействовать с ним, так что это противоположно настройке в приложении Календарь.

Как я могу получить то же поведение, которое реализовал Apple? Мне нужен какой-то способ объединить переключатель в ячейку, чтобы VoiceOver считывал оба при выделении ячейки, затем, когда они дважды щелкают по ней, должен переключаться переключатель, и я не уверен, как эта настройка может быть выполнена. Спасибо!

3 ответа

Решение

Для реализации желаемого поведения, вместо размещения UISwitch в contentView ячейки, добавьте его как accessoryView программно. Тогда при использовании VoiceOver ячейка и переключатель будут работать точно так, как ожидается, точно так же, как в Календаре.

Я хотел бы остановиться на ответе Джои и уточнить, как можно решить этот вопрос в коде.

В tableView:cellForRowAtIndexPath: создайте пользовательское представление UISwitch и добавьте его в accessoryView ячейки. Это может выглядеть примерно так:

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
[switchView setOn:NO];
[switchView addTarget:self action:@selector(selector:) forControlEvents:UIControlEventValueChanged];
cell.accessoryView = switchView;

return cell;

Ячейка теперь будет вести себя как любой собственный переключатель iOS, известный, например, из настроек или календаря. Двойное нажатие на ячейку с включенным VoiceOver теперь переключает UISwitch (вкл / выкл), и VoiceOver автоматически уведомляет пользователя о состоянии переключателя вместе с подсказкой о доступности.

Вы должны быть в состоянии установить пользовательское описание доступности для ячейки, используя

cell.accessibilityLabel = @"Double tap to toggle setting";

Вы можете настроить собственные жесты для запуска VoiceOver в соответствии с этим ответом:

/questions/38315138/est-li-sposob-sozdat-sobstvennyij-zhest-voiceover/38315148#38315148

Но здесь вам не понадобятся пользовательские жесты, вместо didSelectRowAtIndexPath щелкнет выключателем только тогда, когда UIAccessibilityIsVoiceOverRunning правда.

Другие вопросы по тегам