Is there a way to set the accessibility focus programatically (App Store safe)? Any help will be greatly appreciated.
iOS change accessibility focus
57.2k Views Asked by John S At
4
There are 4 best solutions below
1
On
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)
}
0
On
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.
0
On
UIAccessibility.post(notification: .layoutChanged, argument: toast)
toast.becomeFirstResponder()
toast.isAccessibilityElement = true
toast.accessibilityTraits = .staticText //Traits option ie .header, .button etc
toast.accessibilityLabel = "Accessibility label to be read by VoiceOver goes here"
WHERE:
toastis my UIView (a pop up which gets triggered upon particular scenario)- above code needs to be added to the toast
View - this code will automatically change focus to pop up view (
toast) and VoiceOver will readaccessibilityLabel
To focus on element you can call.
Swift:
ObjC:
Otherwise for iOS 8+ use the accessibilityElements to set element order and it will focus automatically on first element in the list