Как заставить VoiceOver рассматривать UITableView как единый элемент доступности? - PullRequest
1 голос
/ 26 февраля 2020

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

Я попытался установить для isAccessibilityElement значение true и присваивая accessibilityLabel, но это не сработало.

1 Ответ

1 голос
/ 27 февраля 2020

Я хочу, чтобы UITableView был единственным элементом доступности, а не контейнером, открывающим для его ячеек VoiceOver.

К сожалению, невозможно, как есть .?
Вы можете кодировать его без предупреждения, потому что имеете дело с неофициальным протоколом, но он не будет интерпретироваться VoiceOver: это беспорядок, потому что вы делаете то же самое на tableView, что и на простом label например, но здесь это не работает.
У меня нет технических доказательств, но я думаю, что tableView не предназначен для того, чтобы быть доступным элементом, должны только его ячейки. ?

Я попытался установить для isAccessibilityElement значение true и присвоить его accessibilityLabel, но он не работал [...], когда я проводил пальцем влево и вправо, VoiceOver проходит через ячейки и не произносит accessibilityLabel представления таблицы.

A UITableView можно рассматривать как контейнер, в который встроено много элементов (его ячейки) , и, как есть, вы не можете одновременно иметь родительское представление (вид таблицы) и его дочерние представления (его ячейки) , которые оба доступны с VoiceOver: можно выбрать либо табличное представление, либо его ячейки.

Если вы не хотите проведите по ячейкам, вставьте фрагмент кода ниже:

myTableViewInsideTheCell.accessibilityElementsHidden = true

Затем VoiceOver информируется о том, что элементы внутри табличного представления не должны интерпретироваться.
Теперь, поскольку табличное представление может ' Чтобы быть видимым как доступный элемент, просто создайте его внутри ячейки табличного представления:

let a11yElt = UIAccessibilityElement(accessibilityContainer: myTableViewCell.contentView)
a11yElt.accessibilityFrameInContainerSpace = myTableViewInsideTheCell.frame
a11yElt.accessibilityTraits = .staticText
a11yElt.accessibilityLabel = "my table view inside the cell is now accessible."

myTableViewCell.accessibilityElements = [a11yElt]

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

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

Вы у вас есть руководство, теперь вам нужно внедрить / адаптировать его в своей среде для достижения своей цели. ?

...