2015-06-11 4 views
2

Я пытаюсь сделать UIPickerView моего Voice Over доступным, я заметил, что протокол UIPickerViewAccessibilityDelegate довольно неполный. Он позволяет указывать только метки и подсказки для компонентов pickerView, а не строк в компонентах. (у него также есть ошибка, что его pickerView: accessibilityLabelForComponent: метод не передает UIPickerView * в его параметре pickerView, вместо этого это UIAccessibilityPickerComponent!)Как установить метку доступности голосового доступа для строк UIPickerView?

Так что теперь мне интересно, есть ли вообще способ установить пользовательские метки доступности для строк моего сборщика или можно только считывать фактические значения строк выбора, отображаемые на экране?

Я пытаюсь сделать представление выбора, которое показывает время на нем, часы, минуты, секунды. Я не мог заставить datePicker сделать это. Но было бы неплохо, если бы каждая строка могла в голосе сказать что-то вроде «3 часа», а не просто 3. Если мне нужно установить видимые ярлыки на то, что я хочу, чтобы голос зачитался, я не уверен, что ярлыки будут соответствовать, чтобы показать это, т.е.

15 часов 35 минут 20 секунд

довольно много, чтобы поместиться на экране в английском, не уверен, насколько она будет расти, когда локализованы .. отсюда идеал быть в состоянии установить метки для каждой строки ,

Приветствие

ответ

3

Если вы реализуете pickerView:viewForRow:forComponent:reusingView: метод UIPickerViewDelegate как способ заселить компоненты UIPickerView, вы можете достичь пользовательских меток доступности для каждой строки, установив accessibilityLabel на UIView вы возвращаетесь из этого метода.

Обратите внимание, что я не был успешным на то, чтобы VoiceOver прочитать пользовательские метки доступности в тех случаях, когда я заселить UIPickerView с помощью pickerView:titleForRow:forComponent: - даже установка accessibilityLabel на возвращенном NSString (который делает работу в некоторых других контекстах, как установка доступности этикетки для UITableView индексы) не изменили произнесение VoiceOver. Таким образом, это единственный способ пойти, если вы хотите настроить, что говорит VoiceOver (или Switch Control) для строки UIPickerView, использовать pickerView:viewForRow:forComponent:reusingView:, а не любые другие методы-кандидаты, чтобы заполнить строки UIPickerView.

Однако я по-прежнему рекомендую вам пересмотреть, желательно ли то, что вы делаете. Когда пользователь приходит на компонент VoiceOver (или Control Control), скажем, например, с accessibilityLabel «Минуты», они знают, что они минут, потому что VoiceOver читает, например. «Минуты, 19», и поэтому при настройке значения им больше не нужно слышать «20 минут», «21 минута»; «20» и «21» вполне достаточно, пользователь может запомнить контекст (например, «теперь я нахожусь на минутах, поэтому давайте настроим его на 45»).

+1

Спасибо за информацию. Наверное, я застрял в данный момент, так как не могу указать метку доступности для компонента, поскольку я описал метод pickerView: accessibilityLabelForComponent: метод не передает UIPickerView * в его параметре pickerView, вместо этого это UIAccessibilityPickerComponent, который является частным API и имеет свойство выбора, которое является правильным выбором. Проблема в том, что у меня есть несколько сборщиков в этом ViewController, поэтому мне нужно определить, какой сборщик я устанавливаю для метки доступности компонента. Я зарегистрировал радиолокационную ошибку об этом. – jimbobuk

+0

Вы можете сказать о дополнительном повторении, хотя спасибо. Если я смогу исправить метки компонентов, возможно, я смогу удалить их. На данный момент я просто установил полные видимые ярлыки на то, что хотел. – jimbobuk

+0

Я хочу повторить, что вы можете вернуть 'UIView' (например,' UILabel') из 'pickerView: viewForRow: forComponent: reusingView:' чей «текст» будет, например. «20» и чья «accessibilityLabel» будет «20 минут».Не нужно, чтобы текст 'UILabel' был« 20 минут »(или для возврата« 20 минут »из' pickerView: titleForRow: forComponent: '). Извините, если я неправильно понял ваш комментарий, и это не так. –