如何在运行仅 iPhone 应用程序(非通用)的 iPad 上支持 UIPickerView 中的 VoiceOver?
Posted
技术标签:
【中文标题】如何在运行仅 iPhone 应用程序(非通用)的 iPad 上支持 UIPickerView 中的 VoiceOver?【英文标题】:How do I support VoiceOver in UIPickerView on an iPad running an iPhone only app (non-universal)? 【发布时间】:2014-01-08 19:46:56 【问题描述】:一般来说,我查看 Apple 的 UICatalog 示例代码以获得基本的 VoiceOver 支持,但看起来示例代码中对 UIPickerViews 有 VoiceOver 支持。我是否需要在某处提供accessibilityLabel 方法来添加VoiceOver 支持?我尝试实现UIPickerViewAccessibilityDelegate 方法,但语音仅读取我的选择器视图中的标签,而不是向上或向下滑动以更改值的提示。
我的选择器视图也设置为 UITextField 的输入视图。所以我不确定这是否相关。
更新: https://github.com/stevemoser/VoiceOverPicker
我创建了一个示例项目来演示该问题。在示例中,显示了一个正常的选择器视图和一个文本字段。还有一个选择器设置为文本字段的输入视图属性。我似乎无法通过在使用 VoiceOver 时点击它来激活任一选择器。虽然我可以通过在屏幕上的视图中滑动(左右)来激活其中一个。有什么想法吗?
更新 2: 看起来如果应用程序是在 iPhone 上运行的 iPhone 应用程序或在 iPad 上运行的 iPad 应用程序,它可以正常工作,但如果它是在 iPad 上运行的仅 iPhone 应用程序,则点击以选择 UIPickerView 不起作用。
【问题讨论】:
我也不知道我在 iPad 上测试这个 iPhone 应用是否重要。 您的示例代码对我来说很好用。在这两种情况下,通过直接选择选择器视图(在点击文本字段之后)或通过(左右)滑动到它。只要给它几秒钟的时间来阅读它。另外您使用的是什么操作系统版本?我已经在 iPhone 4 上的 ios 7 上对此进行了测试 @FerasArabiat 我刚刚在运行 iOS 7 的 iPhone 5S 上运行它,它运行良好。看起来这只是在 iPad 上运行仅限 iPhone 的应用时才会出现的问题。 “[ROW LABEL] [#total] 选择器项目中的可调整 [#number]”暂停 2 到 3 秒,然后“向上或向下滑动以选择值”我总是得到配音1 of 8 无论我滚动哪个元素。有时它会在我们离开很长时间时更新。 【参考方案1】:您只是在为每一行使用标题(而不是自定义视图)做一个普通的 UIPickerView 吗?如果是这样,您无需做任何事情。
您提到 VoiceOver 正确读取了每一行的标签,因此我们知道 UIPickerView 正确地将 isAccessibilityElement 设置为 YES。它还可以正确读取accessibilityLabels。
您是否有可能在选择器有机会读取可访问性提示之前与它进行交互? (为了其他人的利益,accessibilityHint 是史蒂夫在他的问题中提到的“用一根手指滑动或向下以调整值”。)或者也许某些通知正在改变 VoiceOver 焦点,然后提示有机会被阅读?
【讨论】:
我可以让 VoiceOver 通过在视图中从左向右滑动来激活选择器,但不能直接点击选择器。我添加了一个示例项目。 github.com/stevemoser/VoiceOverPicker【参考方案2】:默认情况下,如果您的选择器视图是可访问的,当您使用 VoiceOver 将注意力集中在它上面时,它会按照以下方式读取内容:
"[ROW LABEL] 可调整 [#number] 出 [#total] 选择器项目" a 2 to 停顿 3 秒,然后“向上或向下滑动以选择值”
需要注意的几点:
-
读取标签和提示之间有 2 到 3 秒的延迟,请务必等待。
如果您提供自己的提示,我相信默认提示不会被读取
仅当您通过直接按下某个控件或向右或向左滑动控件到达某个控件时才会读取提示。如果您用两根手指向下或向上滑动,它不会被读取。
确保您在实际设备上进行测试,而不是在模拟器上进行测试,因为它不会显示 VoiceOver 宣布的所有内容。
【讨论】:
“[ROW LABEL] [#total] 选择器项目中的可调整 [#number]”暂停 2 到 3 秒,然后“向上或向下滑动以选择值”我总是得到配音1 of 8 无论我滚动哪个元素。有时它会在我们离开很长时间时更新。以上是关于如何在运行仅 iPhone 应用程序(非通用)的 iPad 上支持 UIPickerView 中的 VoiceOver?的主要内容,如果未能解决你的问题,请参考以下文章
iPhone/iPad - 只将通用打入 iPhone 应用程序
如何在 Xcode 5 中手动将仅限 iPhone 的应用程序转换为 Universal?