UIAccessibilityContainer в дочерних контроллерах представления?

У меня есть родитель UIViewController, к которому я добавляю четыре дочерних контроллера представления. Я пытаюсь управлять доступностью через эти контроллеры. У меня есть перечисление status, которое отслеживает, какие из этих дочерних элементов видны на экране, поэтому, когда это изменяется, я соответствующим образом обновляю accessibilityElementsHidden дочерних элементов и отправляю уведомление LayoutChanged.

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

Похоже, что внутри дочерних элементов методы UIAccessibilityContainer (accessibilityElementCount и др.) никогда не вызываются, поэтому похоже, что они игнорируются, что оставляет мои элементы неупорядоченными и беспорядочными.

Это как должно быть? Может быть, я делаю что-то не так здесь?


person Luke    schedule 17.12.2014    source источник


Ответы (2)


Да, это правильно, то, что делает UIAccessibilityContainer, сообщает VoiceOver, что этот элемент является самым внутренним элементом с точки зрения доступности.

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

person unobf    schedule 17.12.2014
comment
У меня есть containerViewController, который в основном управляет четырьмя детьми. Иногда они отображаются или скрываются, и этот VC контейнера управляет этим поведением. Некоторые дочерние венчурные капиталисты в определенное время не отображаются на экране, и поэтому я не хочу, чтобы специальные возможности подхватывали их в эти моменты. Однако мне нужно указать порядок как этих VC, так и элементов ВНУТРИ этих VC. Это сложная часть :( - person Luke; 18.12.2014
comment
Да, это то, что я использую, чтобы показать и скрыть венчурные капиталисты. Проблема в том, что методы протокола контейнера в дочерних VC никогда не вызываются, поэтому порядок их элементов перепутан. - person Luke; 18.12.2014
comment
Вам вообще не нужно реализовывать UIAccessibilityContainer, просто установите accessibilityElementsHidden соответствующим образом. - person unobf; 19.12.2014
comment
Да, мне нужно это реализовать, мне нужно установить порядок элементов внутри каждого дочернего элемента! Другого способа сделать это нет (это будет работать как с iOS7, так и с iOS8). - person Luke; 19.12.2014
comment
UIAccessibilityContainer не будет работать для вашего сценария. Если порядок определяется тем, что видно, тогда accessibilityElementsHidden гарантирует, что только видимые вещи будут доступны для AT. Если в вашей проблеме с заказом есть что-то еще, предоставьте дополнительную информацию, и я мог бы внести некоторые предложения. - person unobf; 19.12.2014

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

Я просто копаюсь в UIAccessibility со своими собственными многоуровневыми контроллерами представления, поэтому у меня нет ответа, как исправить ваш порядок. Я обновлю этот пост, если смогу понять это.

person Dan Loughney    schedule 01.06.2016