Как заставить UICollectionView прочитать свою собственную метку доступности перед считыванием метки своей первой ячейки? - PullRequest
0 голосов
/ 11 января 2020

В настоящее время у меня есть контейнерное представление, содержащее UICollectionView, который имеет несколько ячеек с поддержкой доступности.

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

Однако мне бы хотелось, чтобы я мог назначить метку доступности для UICollectionView, чтобы VO считывал метку доступности UICollectionView FIRST, прежде чем он прочитал метку доступности первой ячейки. ,

ie, кнопка непосредственно над меткой CollectionView: «кнопка» метка CollectionView: «Панель фильтров» Ячейка 1 (выбрана по умолчанию): метка «Sports» Ячейка 2: «Chevrolet»

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

Ожидаемый результат: VO читает: «Панель фильтра выбрана, Спорт, кнопка»

Фактический результат: VO читает: «выбрано, Спорт, кнопка».

Можно ли сделать так, чтобы VO сначала считывало метку доступности представления коллекции?

1 Ответ

0 голосов
/ 11 января 2020

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

Можно ли сделать так, чтобы VO сначала считывал метку доступности представления коллекции?

Следуя объяснению выше, вы не можете с настоящим конфигурация.
Однако решение может состоять в том, чтобы создать UIAccessbilityElement, который оборачивает представление вашей коллекции простой меткой, которую вы хотите прочитать: этот элемент будет выбран до того, как ячейки представления коллекции станут в очереди.

Наконец, я настоятельно рекомендую взглянуть на демонстрацию внутри этого подробного видео WWD C видео , которое может дать некоторые полезные советы для вашего варианта использования.

⚠️ ⬛️◼️? ▪️ ED IT ▪️?◼️⬛️ ⚠️ (после комментариев MarkS)

Я пытаюсь найти способ обернуть его, но пока мне не удалось .

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

class ViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let a11yWrapper = UIAccessibilityElement(accessibilityContainer: view!)

        a11yWrapper.accessibilityFrameInContainerSpace = CGRect.init(x: 40.0,
                                                                     y: 40.0,
                                                                     width: 100.0,
                                                                     height: 50.0)
        a11yWrapper.accessibilityLabel = "Filter Bar"
        a11yWrapper.accessibilityTraits = .staticText

        view.accessibilityElements = [a11yWrapper]
    }
}

Адаптируйте его к среде своего приложения, и заставит VO прочитать метку доступности сначала просмотр коллекции .

В документации нет примеров, которые бы конкретно указывали go на эту ситуацию.

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

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

...