• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS - 自定义 UIPickerView 上的意外 VoiceOver 行为

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:28:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我的应用中有一个稍微定制的 UIPickerView。基本上我使用 pickerView:viewForRow:forComponent:reusingView 返回一个简单的 UILabel。当我开始着手让应用程序更易于访问时,我注意到 VoiceOver 会读取标签并添加,例如“3 of 300”(即总行数“的”行)。这不是我们想要的行为。

在尝试解决此问题时,我发现如果我使用 pickerView:titleForRow:forComponent 而不是 pickerView:viewForRow:forComponent:reusingView,而没有任何其他更改,那么我只需阅读所选行的“标题”即可获得 VoiceOver 的所需行为。我在 iOS 9 上对此进行了测试。

问题是:如何让 UIPickerView 恢复到“正常”的 VoiceOver 行为,同时仍然使用 pickerView:viewForRow:forComponent:reusingView?感谢您的帮助!



Best Answer-推荐答案


我向 Apple 支持寻求帮助。官方回复是:“我们的工程师已经审查了您的请求,并得出结论认为,鉴于目前的发货系统配置,没有支持的方式来实现所需的功能”。 (为了后代 - 这是最新的 iOS 版本是 9.4 的时候)。他们建议提出新功能的请求,我可以这样做。

为了解决这个问题,我采用了以下解决方法。

  • 创建了一个与我拥有的类几乎相同的基类,但只实现了 pickerView:titleForRow:forComponent 而不是 pickerView:viewForRow:forComponent:reusingView。本类(class)介绍 Vanilla 非自定义选择器。
  • 创建了该基类的子类,现在实现 pickerView:viewForRow:forComponent:reusingView。本类(class)展示了一个完全自定义的选择器。
  • 在我的其他代码中,使用 UIAccessibilityIsVoiceOverRunning() 在 VoiceOver 开启时创建基类对象,否则创建子类对象

因此,当用户运行 VoiceOver 时,他们会得到一个外观丑陋的选择器,但在可访问性方面表现得非常好(即没有行号公告)。我认为这是一个完全合理的“妥协”,因为基本上可以保证用户不会关心视觉外观。

关于iOS - 自定义 UIPickerView 上的意外 VoiceOver 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37041272/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap