Перемещение фокуса курсора специальных возможностей VoiceOver на определенный элемент

У меня возникла проблема с перемещением курсора закадрового голоса к определенному элементу в viewDidAppear. Я следовал рекомендациям Apple, чтобы сосредоточиться на конкретном элементе, в этом случае кнопка закрытия, но курсор оказывается в другом месте

Вот мой код:

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

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification,
                                self.dismissButton);
}

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


person 3254523    schedule 06.01.2014    source источник


Ответы (3)


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

Код, который вы делаете, правильный, но в этот момент система вызовет собственное событие и переопределит ваше.

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

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

person Feras Arabiat    schedule 13.01.2014
comment
Вы придумали лучший способ? Я также делаю то же самое, но это немного глючит. - person Rocky Perera; 11.11.2014
comment
Лучшего способа пока не придумал. Я давно не изучал специальные возможности, я обновлю ответ, если найду новый способ сделать это. - person Feras Arabiat; 11.11.2014

Этот ответ может помочь.

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

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

person josef    schedule 13.01.2014
comment
Недостатком этого метода является то, что порядок элементов также фактически меняется. Люди могут переходить от элемента к элементу, проводя пальцем влево или вправо, и этот метод сортировки по тегу искажает порядок нелогичным образом. Что вам действительно нужно, так это просто иметь естественный хронологический порядок, но просто позволить одному элементу (не первому) получать фокус при появлении представления. Мне также пришлось согласиться на задержку, предложенную @feras-arabiat, которая далека от идеала. - person Marco Miltenburg; 22.10.2015

К вашему сведению: в iOS 11 и UIAccessibilityScreenChangedNotification, и UIAccessibilityLayoutChangedNotification надежно фокусируют для меня элементы Voice Over.

person Rudolf Adamkovič    schedule 27.02.2018
comment
Для того, что мне было нужно, обновление фокуса на элементе в ячейке таблицы с использованием UIAccessibilityLayoutChangedNotification в источнике данных позволило мне сосредоточиться на правильном элементе в ячейке, когда ячейка перезагружалась, передав правильный элемент в качестве аргумента для уведомления, (также может принимать строку). Идеальный. - person elmarko; 03.02.2020
comment
Это не работает в настройке собственного навигационного контроллера либо с использованием собственной панели навигации, либо с пользовательским UIView, который действует как панель навигации. Фокус всегда оказывается на кнопке «Назад» в родной или пользовательской навигации. бар. Тем не менее, он говорит о следующем элементе, который был настроен в UIAccessibilityScreenChangedNotification. - person nr5; 26.11.2020