为什么默认是关闭的
A UITableViewCell
可以看作是一个容器,里面嵌入了许多元素(纽扣...)而且,按原样,您不能同时拥有父视图(表视图单元格)及其子视图(标签、按钮...)那是都可以访问 https://a11y-guidelines.orange.com/mobile_EN/dev-ios.html#hide-elements使用 VoiceOver:可以选择您的单元格或其内容。
默认情况下,内容必须通过 VoiceOver 查看:在单元格中添加两个按钮,您将通过启用/禁用单元格的可访问性看到差异。
有没有更好的方法使细胞可访问?我的意思是制作一个单元格作为一个辅助功能元素,其中将包含 VoiceOver 的所有信息。
为了实现您的目标,最好的方法是让您的手机易于访问,同时提供accessibilityLabel https://a11y-guidelines.orange.com/mobile_EN/dev-ios.html#text-alternatives并添加自定义操作 https://a11y-guidelines.orange.com/mobile_EN/dev-ios-wwdc-19000.html#AccessibilityCustomActions如果在这个单元格中计划了许多行动(例如带有按钮).
遵循这一基本原理可以改善用户体验:一种独特的选择和可能的操作。
如果您不希望读出每个单元格内的元素,只需按如下方式定义每个单元格:
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier",
for: indexPath)
cell.isAccessibilityElement = true
cell.accessibilityLabel = "APPEND YOUR LABELS HERE"
// Add everything you need to construct your cell here.
return cell
}
这是最简单的配置,但您可能决定访问单元格中的每个元素,在这种情况下,它完全不同:请参阅这个答案 https://stackoverflow.com/a/55691540/3825084 or this one https://stackoverflow.com/a/56865431/3825084如果您需要一些实现示例。
就我个人而言,我总是对表视图单元进行子类化以定义其trait https://a11y-guidelines.orange.com/mobile_EN/dev-ios.html#element-trait,它是可访问性元素的数组及其潜在的行动 https://a11y-guidelines.orange.com/mobile_EN/dev-ios.html#custom-actions以便控制向 VoiceOver 用户提供信息的方式:我发现它非常灵活,即使乍一看似乎很乏味。 ;o)