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

Вопрос

UIAccessibilityNotificationQuestion

Автор вопроса: Ke MAОтветов: 2

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

- (IBAction)announce:(id)sender {
    UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,
                                @"Speak this out loud");
}

Насколько я понимаю, когда вы нажимаете кнопку, голос за кадром будет читать "Произнесите это вслух", но вместо этого он читает название кнопки. Может ли кто-нибудь сказать мне, что не так с кодом или почему я использую его неправильно?

И чтобы было понятно, я дважды нажал на кнопку. Когда вы один раз нажимаете кнопку, он читает название кнопки и черту ("кнопка"), а когда вы дважды нажимаете на нее, он просто читает имя кнопки.

Благодаря ответу @ChrisCM. Поставьте задержку на объявление, это сработает.

@IBAction func announce(sender: AnyObject) {
    let dispatchTime: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, Int64(2 * Double(NSEC_PER_SEC)))

    dispatch_after(dispatchTime, dispatch_get_main_queue(), {
         UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Item added to cart")
    })
}

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

  • Когда на устройстве включены специальные возможности (закадровый голос), вам нужно дважды нажать кнопку, чтобы выполнить действие. rmaddy 01.12.2015
  • @rmaddy Спасибо за ответ! Да, я дважды щелкнул кнопку, но она читала имя кнопки вместо аргумента, который я передал методу postNotification :( Ke MA 01.12.2015
  • Вы не должны развивать вопросы. Добавление нового разъясняющего контента - это нормально, но если вы решили проблему, которую изначально задавали, и она привела к новым проблемам, вы должны принять ответ и задать новый вопрос. ChrisCM 04.12.2015

iosswiftaccessibilityvoiceover

Ответы

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

Ваше понимание того, как работает уведомление, верно, однако ваше понимание того, как закадровый голос обрабатывает базовое взаимодействие, неверно. Когда вы публикуете свое объявление, оно запускается, но немедленно прерывается стандартным голосовым ответом на взаимодействие с пользовательским интерфейсом, который должен объявить метку доступности того, что было нажато. Разместите свое объявление после достаточной задержки или на основе чего угодно, кроме клика.

Для второй части вашей проблемы (первой проблеме доступности уделяется особое внимание). Вероятно, это происходит из-за некоторой перерисовки экрана, поэтому неотъемлемая UIAccessibilityScreenChangedNotification публикуется иерархией рисования вида. Вы должны переопределить это, разместив это уведомление самостоятельно с элементом, который вы предпочитаете выделить. Вероятно, либо элемент, инициировавший изменение экрана, либо новый контент, добавленный в результате этого взаимодействия.

Ответ 2 · рейтинг 3 · Vinayak

На основе ответа выше ChrisCM реализовано следующее:

if UIAccessibility.isVoiceOverRunning {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "message")
    }
}

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

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