ios - 如何让 VoiceOver 将 UITableView 视为单个可访问性元素?
问题描述
在一个特殊的用例中,我希望 aUITableView
是一个单一的可访问性元素,而不是一个将其单元格暴露给VoiceOver
.
我尝试将其设置isAccessibilityElement
为true
并分配它accessibilityLabel
,但它没有用。
解决方案
我希望 a
UITableView
成为单个可访问性元素,而不是将其单元格暴露给VoiceOver
.
不幸的是,这是不可能的。
您可以在没有警告的情况下对其进行编码,因为您处理的是非正式协议,但它不会被解释VoiceOver
:这是一团糟,因为您在 atableView
上执行与 simple相同的操作label
,但它在这里不起作用。
我没有技术证据,但我认为 atableView
并不意味着是一个可访问的元素,只有它的单元格应该。
我尝试将它的 isAccessibilityElement 设置为 true 并分配它的 accessibilityLabel 但它不起作用 [...] 当我左右滑动时,VoiceOver 穿过单元格并且不发音表格视图的
accessibilityLabel
.
AUITableView
可以被视为一个容器,其中嵌入了许多元素(它的单元格),并且,您不能同时拥有一个父视图(表格视图)和它的子视图(它的单元格),它们都可以通过 VoiceOver访问:可以选择表格视图或其单元格。
如果您不想在单元格中滑动,请在下面插入代码片段:
myTableViewInsideTheCell.accessibilityElementsHidden = true
然后,VoiceOver
被告知不能解释表视图中的元素。
现在,由于表格视图不能被视为可访问的元素,只需在表格视图单元格中创建一个:
let a11yElt = UIAccessibilityElement(accessibilityContainer: myTableViewCell.contentView)
a11yElt.accessibilityFrameInContainerSpace = myTableViewInsideTheCell.frame
a11yElt.accessibilityTraits = .staticText
a11yElt.accessibilityLabel = "my table view inside the cell is now accessible."
myTableViewCell.accessibilityElements = [a11yElt]
该元素与单元格内的表格视图重叠,并且可以被视为具有公共属性的任何其他可访问元素。
我认为有许多其他方法可以达到您的目标,但是按照这个原理,您可以让 VoiceOver 将 UITableView 视为单个可访问性元素。
您有指南,现在由您在您的环境中实施/调整它以实现您的目标。
推荐阅读
- python - 如何在浮点数Python中转换行字符串
- googletest - GoogleTest - 测试运行时读取日志
- json - 如何将数组传递给 laravel json?
- c# - C# System.Text.Json 或 Newtonsoft JSON 属性标记,用于按属性进行序列化控制
- blazor - dom 渲染后的 Blazor 事件
- copy - 如何避免在 Snowflake 中使用 COPY INTO 从子文件夹中复制数据
- c++ - 在 C++ 中存根具有同名参数的 C 函数
- c - 为什么C中的char数组不是第一个元素ASCII
- java - jaxb2-maven-plugin 雅加达和 java 11
- node.js - 如何使用 twilio React JS 发送短信?