iOS change accessibility focus. iOS change accessibility focus. ios ios

iOS change accessibility focus.


To focus on element you can call.

Swift:

UIAccessibility.post(notification: .screenChanged, argument: self.myFirstView)

ObjC:

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, self.myFirstView);

Otherwise for iOS 8+ use the accessibilityElements to set element order and it will focus automatically on first element in the list

self.accessibilityElements = @[myFirstView, mySecondButton, myThirdLabel]


extension UIAccessibility {    static func setFocusTo(_ object: Any?) {        if UIAccessibility.isVoiceOverRunning {            DispatchQueue.main.asyncAfter(deadline: .now() + 0.8) {                UIAccessibility.post(notification: .layoutChanged, argument: object)            }        }    }}

Add this extension and call it by passing in the view you would like to be focused. If you would like to change focus when navigating using a tabbar, you can call this from viewWillAppear. This code wont work in any init method without a the delay of 0.7 or more.


This is the Swift code:

UIAccessibility.post(notification: .screenChanged, argument: <theView>)

Example usage

let titleLabel = UILabel()override func viewDidAppear(_ animated: Bool) {        super.viewDidAppear(animated)        UIAccessibility.post(notification: .screenChanged, argument: titleLabel)}