Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Голосовая помощь UIButton по запросу с включенным VoiceOver

Автор вопроса: Marcin KapustaОтветов: 1

Я хотел бы спросить, как разработать голосовую помощь по запросу с включенной функцией VoiceOver.

У меня есть такой код для создания UIButton:

_myLocationButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[_myLocationButton setImage:[UIImage imageNamed:@"my_location_icon"] forState:UIControlStateNormal];
_myLocationButton.accessibilityLabel = @"My location";
_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";
[_myLocationButton addTarget:self
                      action:@selector(myLocationButtonPressed)
            forControlEvents:UIControlEventTouchUpInside];

Теперь в методе myLocationButtonPressed у меня есть такой код:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, positionDescription);

Мой вопрос. Когда я пытаюсь дважды нажать, когда myLocationButton активен, VoiceOver говорит только: "Мое местоположение". Я бы хотел, чтобы после двойного нажатия я хотел услышать positionDescription, а не кнопку accessibilityLabel. Я знаю, что метод myLocationButtonPressed вызывается, но по неизвестной причине публикация события UIAccessibilityAnnouncementNotification ничего не делает, и я ничего не слышу.

Может кто-нибудь дать мне несколько советов, как подойти к такой проблеме.

  • каково описание вашей должности? Teja Nandamuri 01.09.2015
  • если это nsstring , вы можете дать это метке/подсказке доступности Teja Nandamuri 01.09.2015
  • Метки доступности для NSString работают только при определенных обстоятельствах, обычно эта информация игнорируется. ChrisCM 02.09.2015

iosobjective-cuibuttonvoiceoveruiaccessibility

Ответы

Ответ 1 · рейтинг 1 · ChrisCM

Единственный способ, который я обнаружил, чтобы объявления читались последовательно, - это опубликовать уведомление с задержкой. Эта функция должна помочь.

- (void)postVoiceOverAnnouncement:(NSString*)message withDelay:(int)seconds {
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(seconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"This will get read out");
    });
}

Даже с добавлением признака запуска медиа-сессии что-то все еще прерывает объявление. На что вы должны обратить внимание, так это на продолжительность вашей задержки. Если кто-то продолжит просматривать ваше приложение, он может прервать объявление. Хотя, поскольку в правильно доступном приложении эта информация должна быть доступна в другом месте, они должны иметь возможность найти ее снова. Это, конечно, просто полезное объявление, чтобы не смещать фокус на ничего не подозревающих пользователей VoiceOver :).

Еще одна проблема с вашим кодом, которую я заметил:

_myLocationButton.accessibilityHint = @"Double tap to hear where You are, in which zone or near zone and floor information in building";

Во-первых, браво за такие подробные подсказки! Однако вы не должны включать часть "Двойное касание, чтобы...". Пользователи умеют взаимодействовать с кнопками через VoiceOver. Это единственный способ взаимодействия с этим? Или можно также нажать Enter на внешней клавиатуре? Как насчет некоторых других гипотетических АТ, в которых жест выбора является каким-то другим взаимодействием... Насколько полезна эта подсказка для тех, кто использует доску Брайля??? Просто сообщите пользователям о последствиях взаимодействия с объектом, пусть АТ позаботится обо всем остальном.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы