Отключение фокуса VoiceOver для UICollectionView для первого входа?
Im использует VoiceOver и имеет проблему с UICollectionView
. У меня есть начальный экран с десятью кнопками, каждый из которых соединяется с одной из десяти ячеек в представлении коллекции. Вид коллекции фактически представляет собой полный размер экрана, и каждая ячейка содержит контроллер детского представления. Все это отлично работает при выключенном VoiceOver, но когда он включается, активация одной из кнопок в середине набора всегда приводит к тому, что представление коллекции появляется в первую ячейку, даже если я не нажал первую кнопку. Я думаю, это связано с тем, что "фокус" VoiceOver переходит к первому элементу, который он видит (т.е. К первой ячейке).
Ive попытался использовать UIAccessibilityScreenChangedNotification
и то же самое с макетом с аргументом соответствующей ячейки, но это не имеет никакого значения, ее не выскользнуть в мой требуемый элемент и всегда появляется в первой ячейке коллекции.
Что я могу делать неправильно здесь?
Я добавляю фрагмент, это называется в viewDidLayoutSubviews
и отлично работает для фактической прокрутки, если VoiceOver выключен. Но как только VO включен, он ломается.
if (self.initialIndexPath) {
[self.collectionView scrollToItemAtIndexPath:self.initialIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:NO];
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, [self.collectionView cellForItemAtIndexPath:self.initialIndexPath]);
}
Это работает абсолютно нормально, если вы фактически фокусируетесь на ячейке, но часть VoiceOver полностью игнорируется, уведомление не смещает фокус на эту правильную ячейку вообще, это всегда первый элемент в первой ячейке.
Также следует отметить, что сами ячейки НЕ являются accessibilityElements и не должны быть, они реализуют протокол UIAccessibilityContainer
, и поэтому ярлык заголовка каждой ячейки будет там, где я хочу, чтобы фокус закончился.