在我们当前的UI中,在某些标签旁边,我们有一个帮助提示按钮,在单击时,会解释标签引用的详细信息。因此,VoiceOver将这两个项目标识为单独的辅助功能项目。
但是,在使用辅助功能时,我们希望我们可以在标签本身中完成所有操作。这样,当标签聚焦时,用户将在这里'账户价值,20美元(accessibilityLabel),双击帮助(accessibilityHint)'
但是,与按钮不同,标签没有与之关联的动作,因此我不确定如何连接实际触发可访问性手势,表明我想要做某事。
如果没有将我们的所有标签转换为按钮,有没有办法在我们的标签上听取辅助功能“动作”方法?
我目前的解决方法是只访问帮助提示按钮,然后将所有相关信息移动到其可访问性属性,但这看起来像代码味道,因为开发人员在更新代码时很容易错过。
在你的UILabel
子类中,覆盖accessibilityActivate()
并实现双击应该做的任何事情:
override func accessibilityActivate() -> Bool {
// do things...
return true
}
如果操作失败,请在这些实例中返回false
。
你试过在UITapGestureRecognizer
上添加一个Labels
吗?
就像是 :
let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapResponse:")
tapGesture.numberOfTapsRequired = 1
sampleLabel.userInteractionEnabled = true
sampleLabel.addGestureRecognizer(tapGesture)
func tapResponse(recognizer: UITapGestureRecognizer) {
print("tap")
}
好的,这比我想象的要容易。要使UILabel响应类似于按钮的可访问性操作,您只需实现UITapGestureRecognizer。 Accessibility框架就像使用任何其他UIView一样使用它。
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(labelTapped))
testLabel.userInteractionEnabled = true
testLabel.addGestureRecognizer(tapGestureRecognizer)
完成后,您的标签将响应可访问性操作。
将您的标签和提示按钮分组为one unique accessible element。
完成后,您可以使用:
accessibilityActivationPoint
属性用于定义双击发生时触发的提示按钮。accessibilityActivate
方法指示双击新元素时要执行的操作。根据您的环境,我不建议为这样一个简单的用例实现custom action ......上面的两个解决方案应该可以完成这项工作。
绝对!您可以通过在辅助功能元素上使用UIAccessibilityCustomActions
而不是使用点击手势识别器来完成此操作。这是因为可访问性与普通用户的操作方式不同,并且单个点击时语音焦点落在某处不会像正常使用情况那样为您提供所需的结果,也不允许您在同一可访问性元素上执行多个选项。
在他们最近的WWDC上,Apple推出了一个很棒的视频,解释了如何将UIAccessibilityCustomActions
添加到任何类型的辅助功能元素中。如果你在33分钟内启动this video,你将能够看到它是如何实现的。
一旦到位,您的Voice Over用户将能够滚动选项并选择最适合他/她的意图的选项,从而允许从同一UILabel访问多个操作。