当您向视图添加UISegmentedControl时,UIAccessibility
将专注于该视图并说:
"(Selected) ItemName Button 1 of 2"
"ItemName Button 2 of 2"
我有一个自定义控件,该控件的UIButtons
切换方式类似于UISegmentedControl
。但是我想弄清楚的是如何使“画外音”在最后宣布n of n
。
我发现最接近的事情是在容器上分配.accessibilityTraits = .tabBar
。问题是它宣布:
"ItemName Button Tab 2 of 2"
但是要符合我们的辅助功能准则,我们不能让它宣布“标签”。
https://developer.apple.com/documentation/uikit/uiaccessibility/uiaccessibilitytraits/1648592-tabbar
只需编写一个自定义accessibilityLabel
,UIAccessibility中是否可以处理此逻辑?
答案 0 :(得分:0)
我有一个自定义控件,该控件的UIButton类似于UISegmentedControl。但是我想弄清楚的是如何使Voice Over在最后宣布n的n。
UIButton
元素分别放在自定义控件的accessibilityElements
数组中,就像容器一样。UIButton
中,插入先前研究的结果来设置accessibilityLabel
。
这是一种逻辑,应该可以通过一些代码来帮助您实现目标,例如(Xcode 10.2.1,Swift 5.0,iOS 12):
class ButtonsViewController: UIViewController {
@IBOutlet weak var myCustomContainer: UIView!
@IBOutlet weak var btn1: UIButton!
@IBOutlet weak var btn2: UIButton!
@IBOutlet weak var btn3: UIButton!
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
myCustomContainer.accessibilityElements = [btn1!, btn2!, btn3!]
let nbButtons = myCustomContainer.accessibilityElements?.count
for (index, elt) in (myCustomContainer.accessibilityElements?.enumerated())! {
let btn = elt as! UIButton
let btnName = btn.titleLabel?.text
btn.accessibilityLabel = btnName! + String(index + 1) + " of " + String(describing: nbButtons!)
}
}
}
答案 1 :(得分:0)