Каждый раз, когда загружается ваше текущее представление, используйте метод UIAccessibilityPostNotification , чтобы получить свою цель.
Существует несколько типов уведомлений об изменениях, но UIAccessibilityScreenChangedNotification может быть тот, который вас интересует.
Уведомляет об изменении всей страницы, включая nil
или UIObject
в качестве входящих параметров:
- При
nil
фокусируется первый доступный элемент на странице.
- При
UIObject
фокусировка смещается на указанный элемент .
Это уведомление сопровождается вокализацией, включая звук, напоминающий объявление новой страницы.
EDIT
Я неправильно понял вашу проблему, которая намного сложнее, чем я думал.
Если вы хотите повлиять на элементы панели навигации, вы должны сделать недоступными собственные элементы и создать свои собственные пользовательские элементы, например, для упорядочивания и / или добавления пользовательских действий.
Давайте возьмем ваш пример с меткой, кнопкой и панелью навигации, включающей кнопку правой панели (я не принимаю во внимание потенциальную кнопку возврата ).
Следуйте инструкциям ниже в вашем контроллере представления:
ШАГ 1 : создайте свои торговые точки.
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myButton: UIButton!
@IBOutlet weak var myRightBarItem: UIBarButtonItem!
ШАГ 2 : скрыть элементы панели навигации, чтобы не слушать их вокализации.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController!.navigationBar.accessibilityElementsHidden = true
}
ШАГ 3 : создать доступный элемент для правой панели кнопок.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let rightButtonView = myRightBarItem.value(forKey: "view") as? UIView
let navigationBarView = rightButtonView?.superview?.superview?.superview
let newElt = UIAccessibilityElement(accessibilityContainer: self.view)
newElt.accessibilityFrameInContainerSpace = navigationBarView!.convert((rightButtonView?.superview!.frame)!,
to:self.view)
newElt.accessibilityLabel = "new navigation right bar button"
newElt.accessibilityTraits = .button
//Order your elements as you wish.
self.view.accessibilityElements = [myLabel,
myButton,
newElt]
}
Последний шаг заключается в добавлении одиночного действия или более к правой кнопке панели в соответствии с назначением вашего приложения.
Как только вы это сделаете, вы можете настроить этот подход и порядок чтения / фокусировки для просмотра содержимого, а затем элементы навигации, как указано в вашем вопросе.
Это решение может быть оптимизировано, но оно позволяет достичь вашей цели.