iOS开发

iOS Accessibility--VoiceOver

2020-09-15  本文已影响0人  JQWONG

我们可以简单把Accessibility理解成无障碍化使用,这个“无障碍”面向群体是视障人士
在iOS中,Accessibility主要分为三部分

  • VoiceOver,旁白读屏
  • Zoom,缩放
  • White on Black,反转颜色
    这里主要介绍VoiceOver

什么是VoiceOver

VoiceOver是苹果手机上一个给视力不好或者盲人使用应用程序的语音辅助软件 ,即使你看不见也不成问题。轻触屏幕即可听到你手指划过的内容,然后运用手势来控制设备。VoiceOver 支持 iPhone、iPad 或 iPod touch 所配备的 app。

如何打开VoiceOver

如何支持VoiceOver

VoiceOver并不是万能的,并不能兼容开发者自定义的控件和视图,因此作为开发者,需要通过一些额外的工作让 APP 可以支持无障碍使用。
所有的标准 UIKit 控件和视图默认支持 VoiceOver,当然你也可以通过UIAccessibility 编程接口关闭或者修改。
如果App使用了用户自定义的一些控件,这时候就需要用户通过 UIAccessibility编程接口来支持无障碍

读的顺序accessibilityLabelaccessibilityValueaccessibilityTraitsaccessibilityHint

let count = 2
addButton.accessibilityLabel = "Add count"
addButton.accessibilityHint = "tap to add count"
addButton.accessibilityValue = "\(count)"
addButton.accessibilityTraits = [.button]
// 如果是单一的控件,可以不用设置accessibilityTraits,系统会自动识别

这段代码读的顺序:Add count(accessibilityLabel) 2(accessibilityValue) button(accessibilityTraits) tap to add count(accessibilityHint)

  let save = UIAccessibilityCustomAction(name: "save the custom view",
                                                 target: self,
                                                 selector: #selector(tappedSave))
  accessibilityCustomActions = [save]
public static func post(notification: UIAccessibility.Notification, argument: Any?)

例如在App中存在错误有弹窗弹出覆盖屏幕的主要部分,在弹窗弹出后,通过调用这个方法,将焦点聚焦到弹窗标题上

UIAccessibility.post(notification: .screenChanged, argument: nil)

实际应用

假设现在有一个UITableview与一个自定义Cell,Cell中有一个按钮,现在需求是可以访问Cell与Cell中的按钮,且分别读出不同的内容,那么我们要怎么实现这个需求呢
我们首先回想一下前面提到的,当一个View(或子类)激活isAccessibilityElement时,它的子视图都变为不可访问了,所以单纯设置Cell为访问元素然后再访问子元素这个思路是行不通的

private func setupAccessibility() {
        accessibilityLabel = "cell"
        nameLabel.accessibilityLabel = nameLabel.text
        nameLabel.isAccessibilityElement = true
        logoView.isAccessibilityElement = true
        logoView.accessibilityLabel = "logo"
        button.accessibilityHint = "save the info"
    }
private func setupAccessibility() {
        isAccessibilityElement = true
        accessibilityLabel = "cell"
        nameLabel.accessibilityLabel = nameLabel.text
        nameLabel.isAccessibilityElement = true
        logoView.isAccessibilityElement = true
        logoView.accessibilityLabel = "logo"
        button.isAccessibilityElement = true
        button.accessibilityHint = "save the info"

        let action = UIAccessibilityCustomAction(name: "action", target: self, selector: #selector(didTapButton))
        accessibilityCustomActions = [action]
    }

Tips


参考文档
Accessibility Programming Guide for iOS
iOS Accessibility Tutorial: Getting Started
Making Apps More Accessible With Custom Actions
如果大家有其他解决方案欢迎留言交流
支持原创,版权所有
未经授权请勿转载
上一篇下一篇

猜你喜欢

热点阅读