如何为 UIPickerView 行设置 Voice Over 辅助功能标签?
Posted
技术标签:
【中文标题】如何为 UIPickerView 行设置 Voice Over 辅助功能标签?【英文标题】:How to set the Voice Over accessibility label for UIPickerView rows? 【发布时间】:2015-06-11 20:38:22 【问题描述】:我正在尝试使我的 Voice Over 的 UIPickerView 可访问,我注意到 UIPickerViewAccessibilityDelegate 协议相当不完整。它只允许您为 pickerView 组件指定标签和提示,而不是组件中的行。 (它还有一个错误,即它的 pickerView:accessibilityLabelForComponent: 方法没有在它的 pickerView 参数中传递 UIPickerView*,而是一个 UIAccessibilityPickerComponent!)
所以我现在想知道,有没有办法为我的选择器的行设置自定义可访问性标签,还是只能读出屏幕上显示的实际选择器行值?
我正在尝试制作一个显示时间、小时、分钟、秒的选择器视图。我无法让 datePicker 执行此操作。但是,如果每一行都可以在旁白中说出类似“3 小时”而不是仅仅 3 个小时,那就太好了。如果我必须将可见标签设置为我希望旁白读出的内容,那么我不确定标签将适合显示这一点,即。
15 小时 35 分 20 秒
用英文显示在屏幕上的内容相当多,不确定本地化后它会增长多大..因此能够为每一行设置标签是理想的。
干杯
【问题讨论】:
【参考方案1】:如果您正在实现UIPickerViewDelegate
的pickerView:viewForRow:forComponent:reusingView:
方法作为填充UIPickerView 组件的方式,您可以通过在您从该方法返回的UIView
上设置accessibilityLabel
来实现每一行的自定义可访问性标签.
请注意,在我使用 pickerView:titleForRow:forComponent:
填充 UIPickerView
的情况下,我未能成功让 VoiceOver 读取自定义辅助功能标签 - 甚至在返回的 NSString
上设置 accessibilityLabel
(这在其他一些情况下确实有效,例如为 UITableView 索引设置可访问性标签)并没有改变 VoiceOver 的发音。因此,如果您想自定义 VoiceOver(或 Switch Control)对 UIPickerView 行所说的内容,似乎唯一的方法是使用 pickerView:viewForRow:forComponent:reusingView:
,而不是其他 2 种候选方法中的任何一种来填充 UIPickerView 行。
但是,我仍然建议您重新考虑您正在做的事情是否可取。当 VoiceOver(或 Switch Control)用户到达组件时,例如使用accessibilityLabel
“Minutes”,他们知道他们在几分钟内,因为 VoiceOver 读取例如“分钟,19”,所以在调整数值时,不需要再听到“20分钟”,“21分钟”; “20”和“21”就足够了,用户可以记住上下文(例如“现在我在几分钟,所以让我们将其调整为 45”)。
【讨论】:
感谢您的信息。我想我现在卡住了,因为我无法指定组件的可访问性标签,因为我描述了 pickerView:accessibilityLabelForComponent: 方法在它的 pickerView 参数中没有传递 UIPickerView*,它是一个 UIAccessibilityPickerComponent 而不是私有 API并且有一个选择器属性是正确的选择器。问题是我在这个 ViewController 中有多个选择器,所以我需要能够识别我正在为其设置组件可访问性标签的选择器。我已经记录了一个关于它的雷达错误。 您对额外的重复提出了一个很好的观点,尽管谢谢。如果我可以修复组件标签,那么也许我可以删除它。现在我刚刚将完整的可见标签设置为我想要的。 我想重复一遍,您可以从pickerView:viewForRow:forComponent:reusingView:
返回 UIView
(例如 UILabel
),其 text
将是例如“20”,其accessibilityLabel
将是“20 分钟”。无需将UILabel
的文本也设为“20 分钟”(或从pickerView:titleForRow:forComponent:
返回“20 分钟”)。抱歉,如果我误解了您的评论,但事实并非如此。
再次感谢。我将看看切换到这种方法。我现在正在与同一个视图控制器上的另一个可访问性元素搏斗:( 干杯
当我们扫过行时,您是否看到 PickerView 索引不正确的问题?无论我滑动到哪一行,我总是得到“#totalNumber 中的 1 个”。以上是关于如何为 UIPickerView 行设置 Voice Over 辅助功能标签?的主要内容,如果未能解决你的问题,请参考以下文章