首页 文章

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

提问于
浏览
5

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

但是,在使用辅助功能时,我们希望我们可以在标签本身中完成所有操作 . 这样,当标签聚焦时,用户将在这里'账户 Value ,20美元(accessibilityLabel),双击帮助(accessibilityHint)'

但是,与按钮不同,标签没有与之关联的动作,因此我不确定如何连接实际触发可访问性手势,表明我想要做某事 .

如果没有将我们的所有标签转换为按钮,有没有办法在我们的标签上听取辅助功能“动作”方法?

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

5 回答

  • 1

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

    完成后,您可以使用:

    根据您的环境,我不建议为这样一个简单的用例实现custom action ......上面的两个解决方案应该可以胜任 .

  • 2

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

    在他们最近的WWDC上,Apple推出了一个很棒的视频,解释了如何将 UIAccessibilityCustomActions 添加到任何类型的辅助功能元素中 . 如果你开始this video 33分钟,你将能够看到它是如何实现的 .

    一旦到位,您的Voice Over用户将能够滚动选项并选择最适合他/她的意图的选项,从而允许从同一UILabel访问多个操作 .

  • 0

    在你的 UILabel 子类中,覆盖accessibilityActivate()并实现双击应该做的任何事情:

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

    如果操作可能失败,请在这些实例中返回 false .

  • 0

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

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

    let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(labelTapped))
        testLabel.userInteractionEnabled = true
        testLabel.addGestureRecognizer(tapGestureRecognizer)
    

    完成后,您的标签将响应可访问性操作 .

相关问题