Запретить показу UIButton TouchWhenHighlighted изменения описания VoiceOver

Настройка показывает TouchWhenHighlighted, например. с помощью параметра IB «Показывает касание при выделении», на кнопке без названия будет изменено описание VoiceOver. После прочтения метки специальных возможностей VoiceOver подает звуковой сигнал и объявляет описание изображения. Есть ли способ отключить это поведение?


person Ilias Karim    schedule 02.02.2021    source источник


Ответы (2)


Установите accessibilityContainerType = UIAccessibilityContainerTypeSemanticGroup.

person Ilias Karim    schedule 02.02.2021
comment
Это решение работает, спасибо и ????, но я не могу объяснить, почему... если у вас есть объяснение, которое можно добавить к вашему ответу, мне будет очень интересно его прочитать. На первый взгляд это больше похоже на обходной путь, чем на реальное решение, не так ли? ???? - person XLE_22; 04.02.2021

Установка значения accessibilityContainerType на UIAccessibilityContainerTypeSemanticGroup работает, и это здорово ????, но я не уверен, что это цель этого элемента.
Даже если кнопка может рассматриваться как контейнер, я понял, что это свойство экземпляра имеет дело с контейнеры на основе данных. ????

Я изучил вашу проблему, которая вызвала у меня любопытство, и, к сожалению, не смог найти подходящего решения с помощью Apple API.

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

По-видимому, когда используется свойство showsTouchWhenHighlighted, внутри кнопки появляется добавленное представление, которое отображает светящееся прикосновение ⟹ это изображение UIButtonBarPressedIndicator, которое вы можете обнаружить, например, благодаря иерархии отладки в Xcode. ????

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

Итак, чтобы VoiceOver не использовал распознавание экрана и не считывал бесполезную информацию, я сделал что-то очень уродливое, но эффективное для достижения вашей цели в viewDidAppear, например (см. лист «основные операции» этого ссылка):

myButton.subviews.forEach{$0.accessibilityTraits = .none}

Плохой хак из-за нативной проблемы реализации или простой строки кода, которую может понять любой, это решение удаляет все возможные функции распознавания экрана VoiceOver с кнопки ????... и мне все еще интересно, если вы Можете немного объяснить, почему ваше решение работает, пожалуйста. ????

person XLE_22    schedule 03.02.2021