是否可以为UILabel分配辅助功能?

时间:2016-09-06 18:38:20

标签: ios swift uilabel accessibility voiceover

在我们当前的用户界面中,在某些标签旁边,我们有一个帮助提示按钮,在点击时会解释标签引用的详细信息。因此,VoiceOver将这两个项目标识为单独的辅助功能项目。

但是,在使用辅助功能时,我们希望我们可以在标签本身中执行所有操作。这样,当标签聚焦时,用户将在此处获得账户价值,20美元(accessibilityLabel),双击帮助(accessibilityHint)'

然而,与按钮不同,标签没有与之关联的动作,所以我不确定如何连线实际触发可访问性手势,表明我想做某事。

没有将我们所有的标签转换为按钮,是否有任何方法可以聆听可访问性'操作'我们标签上的方法?

我目前的解决方法是只访问帮助提示按钮,然后将所有相关信息移动到其辅助功能属性,但这看起来像代码味道,因为开发人员很容易错过它更新代码。

5 个答案:

答案 0 :(得分:2)

在您的UILabel子类中,覆盖accessibilityActivate()并实现两次轻击应该执行的操作:

override func accessibilityActivate() -> Bool {
    // do things...
    return true
}

如果操作失败,则在这些情况下返回false

答案 1 :(得分:1)

您是否尝试将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")
}

答案 2 :(得分:0)

好的,这比我想象的要容易。要使UILabel响应类似于按钮的可访问性操作,您只需实现UITapGestureRecognizer。 Accessibility框架就像使用任何其他UIView一样使用它。

//Old url
http://localhost/#/

// wait the promise (eg 1s) and then change the url to
http://localhost/#/heroes

一旦您这样做,您的标签将响应可访问性操作。

答案 3 :(得分:0)

绝对!您可以通过在辅助功能元素上使用UIAccessibilityCustomActions来执行此操作,而不是使用轻击手势识别器。这是因为可访问性与普通用户的操作方式不同,并且在焦点上的声音落在某处时单次点击不会像正常使用那样为您提供所需的结果,也不会允许您在同一个可访问性元素上执行多个选项。

在最近的WWDC上,Apple播放了一段精彩的视频,解释了如何在任何类型的辅助功能元素中添加UIAccessibilityCustomActions。如果您在this video开始了33分钟之后,将能够看到它是如何实现的。

就位后,您的Voice Over用户将能够滚动浏览这些选项,然后选择最适合其意图的选项,从而可以从同一UILabel进行多个操作。

答案 4 :(得分:0)

将标签和提示按钮分组为one unique accessible element

完成后,您可以使用:

根据您的环境,我不建议为这样一个简单的用例实现custom action……以上两种解决方案都可以完成工作。