如何为 UIPickerView 行设置 Voice Over 辅助功能标签?

How to set the Voice Over accessibility label for UIPickerView rows?

我正在尝试使我的 Voice Over 的 UIPickerView 易于访问,我注意到 UIPickerViewAccessibilityDelegate 协议相当不完整。它只允许您为 pickerView 组件指定标签和提示,而不是组件内的行。 (它还有一个错误,它的 pickerView:accessibilityLabelForComponent: 方法没有在它的 pickerView 参数中传递一个 UIPickerView*,而是一个 UIAccessibilityPickerComponent!)

所以我现在想知道,是否有任何方法可以为我的选择器的行设置自定义辅助功能标签,或者是否只能读出屏幕上显示的实际选择器行值?

我正在尝试做一个显示时间的选择器视图,小时、分钟、秒。我无法让 datePicker 执行此操作。但如果每一行都可以在画外音中说“3 小时”而不是仅仅 3 小时,那就太好了。如果我必须将可见标签设置为我希望画外音读出的内容,那么我不确定标签将适合显示这一点,即。

15 小时 35 分 20 秒

在英文屏幕上显示的内容太多了,不确定本地化后会增长多少.. 因此能够为每一行设置标签是理想的选择。

干杯

如果您正在实施 UIPickerViewDelegatepickerView:viewForRow:forComponent:reusingView: 方法作为填充 UIPickerView 组件的方式,您可以通过在 UIView 你正在从那个方法返回。

请注意,在我使用 pickerView:titleForRow:forComponent: 填充 UIPickerView 的情况下,我未能成功让 VoiceOver 读取自定义辅助功能标签 - 即使在返回的 [=17] 上设置 accessibilityLabel =](它在其他一些上下文中确实有效,比如为 UITableView 索引设置可访问性标签)并没有改变 VoiceOver 的发音。因此,如果您想自定义 VoiceOver(或切换控件)代表 UIPickerView 行的内容,唯一的方法似乎是使用 pickerView:viewForRow:forComponent:reusingView:,而不是其他 2 种候选方法中的任何一种来填充 UIPickerView 行。

不过,我还是建议你重新考虑一下你做的事情是否可取。当 VoiceOver(或切换控制)用户到达组件时,例如使用 accessibilityLabel "Minutes",他们知道他们在几分钟内,因为 VoiceOver 读取例如"Minutes, 19",等调整数值时,就不需要再听到“20分钟”、“21分钟”; “20”和“21”就足够了,用户可以记住上下文(例如"now I am on minutes, so let's adjust it to 45")。