如何为 UIPickerView 行设置 Voice Over 可访问性标签?

jim*_*buk 6 uipickerview ios voiceover

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

所以我现在想知道,有没有办法为我的选择器的行设置自定义可访问性标签,还是只能读出屏幕上显示的实际选择器行值?

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

15 小时 35 分 20 秒

非常适合用英语显示在屏幕上,不确定本地化后它会增长多大..因此能够为每一行设置标签的理想选择。

干杯

Bor*_*šek 5

如果您正在实施pickerView:viewForRow:forComponent:reusingView:的方法UIPickerViewDelegate结合的方式来填充UIPickerView组件,您可以通过设置实现对每一行定制的无障碍标签accessibilityLabelUIView您是从方法返回。

请注意,在我填充UIPickerViewusing 的情况下,我没有成功让 VoiceOver 读取自定义辅助功能标签pickerView:titleForRow:forComponent:- 即使accessibilityLabel在返回的设置上NSString(这在其他一些上下文中有效,例如为 UITableView 索引设置辅助功能标签)也没有改变 VoiceOver 的发音. 因此,如果您想自定义 VoiceOver(或切换控制)代表 UIPickerView 行的内容,似乎唯一的方法是使用pickerView:viewForRow:forComponent:reusingView:而不是其他 2 个候选方法中的任何一个来填充 UIPickerView 行。

但是,我仍然建议您重新考虑您正在做的事情是否可取。当 VoiceOver(或切换控制)用户到达组件时,例如使用accessibilityLabel“分钟”,他们知道他们是分钟,因为 VoiceOver 读取例如“分钟,19”,因此在调整值时,他们不需要再次听到“20分钟”、“21分钟”;“20”和“21”就足够了,用户可以记住上下文(例如“现在我在几分钟内,所以让我们将其调整为45”)。