无障碍技术 | iOS平台如何实现文本中的链接可被视障用户访问

2020年02月29日 824阅读

cover

背景介绍

在登录注册模块的开发过程中,常常会遇到隐私协议的问题,需要在大段的文本中插入具体条款的链接。视障用户在使用旁白访问时,通常会获得一个包含整个段落文本的焦点。焦点会朗读整个段落的文本内容。普通用户点击文本中链接位置时会跳转到对应的协议界面。那么视障用户该如何打开链接呢。这需要开发者在端侧作出一些处理。

当旁白开启的时候,触摸隐私协议内容
会有一个焦点聚焦到所触摸的说明信息上,
这时会朗读整段的文字信息,视障用户可以藉此来获取这部分信息。

交互逻辑

在介绍交互逻辑之前,先要引入一个转子的概念。简单来说,转子是一种调整“旁白”的工作方式的工具。不仅可以调整“旁白”音量或朗读速率等一些基础的设置,还可以调整用户阅览信息的方式。

旁白中的“转子”
旁白中的“转子”

当“旁白”开启时,用户可以通过在屏幕上转动双指以启用转子。继续转动手指则可以在转子的设置中间来回切换。当听到想要的设置时,停止转动手指,这时,用手指在屏幕上上下轻扫就可以使用这项设置。可用的转子设置及其效果取决于当前的位置。例如,如果在浏览网页时选取了“标题”,上下轻扫会将“旁白”光标移动到下一个或上一个标题。

当视障用户访问到一段文本时,该怎么切换才能打开文本中的链接呢?转子中有一项链接的设置,可以让用户在文本中的链接之间来回切换,当用户切换到想要打开部分的内容时,即可通过双击屏幕来打开。

切换转子到链接模式,可通过上下轻扫屏幕在文本中的链接间切换。
切换转子到链接模式,可通过上下轻扫屏幕在文本中的链接间切换。

实现方式

不同的开发者,会采取不同方法来实现这一效果。实现方式的差异导致一些开发者会发现在启用转子时,并没有链接的选项。那么如何构建或者优化现有的实现方式,来制作一个可以被视障用户无碍访问的文本链接呢。可以参考以下方法。需要说明的是,尽管这部分的交互逻辑看上去有些繁琐,但实现起来却十分简单。

实现一个类似的效果的文本会无法避免会用到NSAttributedString。NSAttributedStringKey中包含一个名为NSLinkAttributedName的键,当我们给文本中的每项链接都添加这一Attribute时,在旁白聚焦到文本的内容后,打开转子就会出现链接的设置,上下轻扫屏幕,就可以在链接之间切换了。将键的值设置为链接的URL,这样,当用户切换到想开启的链接时,双击屏幕就可以打开了。

具体的实现方式,可以参考下面的代码:

 

Swift

let privacyString = NSMutableAttributedString(string: "未注册的手机号验证后将自动创建账号,登录即代表已经同意《用户协议》")

let linkRange = NSRange(location: 27, length: 6)

 

// FIXME: 为链接添加NSLinkAttributedName

privacyString.addAttributes([NSAttributedString.Key.link : "http://www.siaa.org.cn"], range: linkRange)

 

privacyLabel.attributedText = privacyString;

 

Objective-C

NSMutableAttributedString *privacyString = [[NSMutableAttributedString alloc] initWithString:@"未注册的手机号验证后将自动创建账号,登录即代表已经同意《用户协议》"];

NSRange linkRange = NSMakeRange(27, 6);

 

// FIXME: 为链接添加NSLinkAttributedName

[privacyString addAttribute:NSLinkAttributeName value:@"http://www.siaa.org.cn" range:linkRange];

privacyLabel.attributedText = privacyString;

 

 

参考文档

[1] 关于 iPhone、iPad 和 iPod touch 上的旁白转子 

[2] NSAccessibilityLinkTextAttribute. Apple Developer Documentation