我有一些我可以访问的自定义UITableViewCells . 我试图让VoiceOver在点击单元格时读取所有子视图 . 根据我的理解,这是您在使用或转发UITableViewCell时免费获得的内容(如果我错了,请纠正我 . )
问题出在我的一些细胞中 . 在我的大多数细胞中,一切都正确读取 . 但是,当我点击包含UITextField(或UITextField的子类)的单元格时,它不会读取UITextField . 它将读取所有其他元素(除了一个单元格上的UIButton),但会跳过文本字段 .
有谁知道它不会读取UITextFields的任何原因?还有一个UIButton?对于那些需要阅读的人来说,有什么特别需要做的吗?或者我还没有做过特殊的UITableViewCell子类?
很抱歉没有发布任何代码,我不确定哪些代码与发布相关,因为我在代码中根本没有看到任何与可访问性相关的内容 . 在故事板中,它被选择为我想要读取的所有元素都可访问,但是UITextFields似乎忽略了这个设置 .
2 回答
您要做的是创建自定义单元类,并覆盖该类的accessibilityLabel属性 . 收集所有子视图辅助功能标签 . 我现在正在使用Windows机器,所以请原谅,如果这不能完全编译,但你应该明白这个想法 .
通过将其包含在属性覆盖中,而不是在其更改的所有潜在点上设置可访问性标签,可以消除未来开发人员对此行为的担忧 . 您还可以自动处理这些单元格中的动态元素,因为可访问性标签将与子视图的可访问性信息保持同步 . 然后,您可以将此类包含为任何未来子类的父类,以便轻松地维护此行为 . 如果你的任何开发人员都愚蠢到从继承树中删除这个子类,你就会遇到更大的问题!
确保使用此方法,您的单元格具有正确的角色 . 无论单元格的活动元素是什么(无论是标签,链接,按钮等)都应该是您的超级视图的角色 . 其他元素只是提供信息 .
假设您的表格单元格有4个元素,一个标签,一个按钮,一个文本字段,一个图像视图 . 所有这些元素都在您的tablecell的
contentView
中 .为了确保语音翻转读取表格单元格中的所有4个元素,您需要告诉您
contentview
包含4个元素的声音 . 您可以通过将contentView
中的所有元素添加到contentView
的accessibilityElements
数组中来实现此目的 .然后,配音不会跳过这4个元素中的任何一个 .