При использовании Voice Over в iOS вызов UIAccessibility.post(notification:argument:)
для объявления ошибки поля на самом деле не сообщает об ошибке.
У меня есть кнопка отправки, и при фокусировке на кнопке голос зачитывает заголовок кнопки, как и следовало ожидать. При нажатии кнопки голос зачитывает заголовок снова. Когда нажата кнопка отправки, я выполняю некоторую проверку и, когда есть ошибка поля, я пытаюсь объявить об этом, позвонив:
if UIAccessibility.isVoiceOverRunning {
UIAccessibility.post(notification: .announcement, argument: "my field error")
}
Интересно, что если я остановлюсь на точке останова в отладчике, произойдет объявление. Когда я не останавливаюсь на точке останова, объявления не происходит.
Уведомление публикуется в основном потоке, и, если оно похоже на NotificationCenter.default
, я предполагаю, что оно обрабатывается в том же потоке, в котором оно было опубликовано. Я попытался отправить вызов в основную очередь, хотя он уже находится в основном потоке, и это, похоже, тоже не работает.
Единственное, что я могу думать, это то, что уведомление публикуется и просматривается до того, как закадровый голос закончит чтение заголовка кнопки отправки, и уведомление об объявлении не прерывает текущий голос.
Я был бы очень признателен за любую помощь в этом.