TextKit 和旁白

Posted

技术标签:

【中文标题】TextKit 和旁白【英文标题】:TextKit and VoiceOver 【发布时间】:2014-05-05 00:01:25 【问题描述】:

我一直在关注 ios7 Day-by-Day 多页 TextKit 教程,但遇到了可访问性问题。教程代码在这里:iOS7 Day-by-Day

问题是每个文本视图(每列一个,每个“页面”两个)似乎包含整个字符串,并且启用 VoiceOver 时,每次一列获得焦点时,都会从最从字符串的开头到最后,而不是读取列中实际可见的文本。

textviews/columns 是使用新的 iOS7 方法创建的

UITextView *textView = [[UITextView alloc] initWithFrame:textViewFrame textContainer:textContainer];

如何让 VoiceOver 只读取每列中的可见文本?

【问题讨论】:

【参考方案1】:

听起来您只需要确定哪些文本是可见的,然后将其传递给 VoiceOver。

为此,您可以使用two possible methods found in this related question 和可见文本的范围you can then create a substring,例如:

NSString *textToPassToVoiceOver = [[textView.text] rangeOfSubstring:visibleTextRange];

有道理吗?

【讨论】:

有点。在计算了如何将其放入列和文本容器中之后,必须再次计算文本的可见范围是不是有点奇怪?另外,如何将子字符串传递给 VoiceOver?这是否意味着我必须手动为每个 textview 设置accessibility.label?这一切都感觉像是一种解决方法。为什么不简单地将 textviews 文本属性设置为它所代表的文本容器?

以上是关于TextKit 和旁白的主要内容,如果未能解决你的问题,请参考以下文章

NSTextAttachment 使用 textkit 时覆盖文本

如何使用 TextKit(不是 NSAttributedStrings)在 UITextView 中获取属性信息

关于Text Kit 一些事

再次将 textKit 从 Objective-C 转换为 Swift

iOS7 TextKit:项目符号对齐

如何防止屏幕阅读器/旁白阅读隐藏在 WPF 中的控件?