启用VoiceOver后,当焦点出现在UIButton
/ UITableViewCell
/ UICollectionViewCell
时,VoiceOver会读取它的辅助功能标签一次。
然后,只要用户双击选择UIButton
/ UITableViewCell
/ UICollectionViewCell
,VoiceOver就会再次读取相同的辅助功能标签,同时在{{1}上执行操作(导航等) } / UIButton
/ UITableViewCell
选择。
我搜索了很多,但无法在UICollectionViewCell
/ UIButton
/ UITableViewCell
选择中找到停止/停用VoiceOver阅读辅助功能标签的方法。
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
让我们看看如何停止UIButton
和UITableViewCell
元素的VoiceOver辅助功能读取。
UIBUTTON :只需创建自己的按钮类并覆盖accessibilityActivate
方法。
class BoutonLabelDoubleTap: UIButton {
override func accessibilityActivate() -> Bool {
accessibilityLabel = ""
return true
}
}
UITABLEVIEWCELL :要遵循的两个步骤。
创建一个覆盖accessibilityActivate
方法的自定义UIAccessibilityElement
。
class TableViewCellLabelDoubleTap: UIAccessibilityElement {
override init(accessibilityContainer container: Any) {
super.init(accessibilityContainer: container)
}
override var accessibilityTraits: UIAccessibilityTraits {
get { return UIAccessibilityTraitNone }
set { }
}
override func accessibilityActivate() -> Bool {
accessibilityLabel = ""
return true
}
}
使用先前创建的类在视图控制器中实现表格视图单元。
class TestButtonTableViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
@IBOutlet weak var myTableView: UITableView!
@IBOutlet weak var bottomButton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
myTableView.delegate = self as UITableViewDelegate
myTableView.dataSource = self as UITableViewDataSource
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let zeCell = tableView.dequeueReusableCell(withIdentifier: "myPersoCell",
for: indexPath)
zeCell.accessibilityElements = nil
var elements = [UIAccessibilityElement]()
let a11yEltCell = TableViewCellLabelDoubleTap(accessibilityContainer: zeCell)
a11yEltCell.accessibilityLabel = "cell number " + String(indexPath.row)
a11yEltCell.accessibilityFrameInContainerSpace = CGRect(x: 0,
y: 0,
width: zeCell.contentView.frame.size.width,
height: zeCell.contentView.frame.size.height)
elements.append(a11yEltCell)
zeCell.accessibilityElements = elements
return zeCell
}
}
我还没有尝试过UICollectionViewCell
,但它的原理应与UITableViewCell
相同。
按照这些代码段,您现在可以确定VoiceOver是否应在选择时停止读取所需的元素标签。
答案 1 :(得分:0)
Swift 5
对我有用的是设置 myElementIWantSilent.accessibilityTraits = .none
编辑:我应该注意到这些也存在:
viewContainingSilentElement.isAccessibilityElement = true
viewContainingSilentElement.accessibilityTraits = .image
viewContainingSilentElement.accessibilityLabel = "some text i want read aloud"
iPhone 8
iOS 14.5.1
Xcode 12.5