2014-01-06 2 views
6

У меня проблема с перемещением курсора озвучивания на определенный элемент в viewDidAppear. Я последовал Apple's guidelines для фокусировки на определенном элементе, в этом случае кнопка распускать, но курсор заканчивается в другом местеПеремещение доступности Отметка курсора для конкретного элемента

Вот мой код:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, 
           self.dismissButton); 
} 

Любая помощь, идеи, несомненно, будет оценен по достоинству! Спасибо большое.

ответ

8

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

Код, который вы делаете, верен, но в этот момент система инициирует собственное событие и отменяет ваш.

Что вы можете попытаться сделать, это отправить уведомление с опозданием. Но это приведет к тому, что фокус начнет прыгать немного, открывая представление.

Это не очень важный ответ, но на этом я сейчас и нахожусь. Я уточню, если я выясню, как это сделать.

+0

Вы выяснили лучший способ? Я тоже делаю то же самое, но это немного багги. –

+0

Пока не поняли лучшего пути. Прошло некоторое время с тех пор, как я просмотрел Accessibility, я обновлю ответ, если найду новый способ сделать это. –

2

This answer может быть полезен.

В основном вам необходимо обернуть элементы в виде контейнера, если они уже не в одном, а затем переопределить указанные методы.

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

+0

Недостатком этого метода является то, что порядок элементов также изменяется. Люди могут перемещаться из элемента в элемент, прокручивая влево или вправо, и этот метод сортировки по тегу будет беспорядочно нарушать порядок. То, что вы действительно хотите, просто имеет естественный хронологический порядок, но просто пусть один элемент (а не первый) получает фокус, когда появляется представление. Я также должен был согласиться на задержку, предложенную @ feras-arabiat, которая далека от идеала. –

0

FYI: Начиная с iOS 11, как UIAccessibilityScreenChangedNotification, так и UIAccessibilityLayoutChangedNotification надежно фокусировать голос за элементами для меня.

Смежные вопросы