【问题标题】:Is it possible to assign an accessibility action to a UILabel?是否可以为 UILabel 分配可访问性操作?
【发布时间】:2016-09-06 18:38:19
【问题描述】:

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

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

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

除了将我们所有的标签都转换为按钮之外,有什么方法可以监听我们标签上的可访问性“操作”方法吗?

我目前的解决方法是仅使帮助提示按钮可访问,然后将所有相关信息移至其可访问性属性,但这似乎是代码异味,因为开发人员在更新代码时很容易错过这一点。

【问题讨论】:

    标签: ios swift uilabel accessibility voiceover


    【解决方案1】:

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

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

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

    【讨论】:

    • 有趣。我没有意识到这一点。这适用于标签吗?我会对其进行测试,但现在我无法使用 Mac。
    • @MarqueIV 是的,我只是在一些标签上使用过它并且可以确认它有效
    • @MarqueIV :accessibilityActivate 方法非常强大,与您的用例中的 accessibilityActivationPoint 属性一样强大。
    【解决方案2】:

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

    【讨论】:

    • 理想情况下,您不会使用 TapGestureRecognizers,因为它们不为无障碍用户提供多种操作选项,并且在您使用 Voice Over 时难以控制。重写 UIAccessibilityCustomActions 是首选方法。
    • 这个可行的解决方案只是一种变通方法,因为本机可访问性工具提供了不同的方法来实现此目标(accessibilityActivate、accessibilityActivationPoint):在其设计的区域中使用适当的工具。 ;o)
    【解决方案3】:

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

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

    一旦你这样做了,你的标签就会响应无障碍操作。

    【讨论】:

      【解决方案4】:

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

      完成后,您可以使用:

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

      【讨论】:

        【解决方案5】:

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

        在最近的 WWDC 上,Apple 发布了一段出色的视频,解释如何将 UIAccessibilityCustomActions 添加到任何类型的可访问性元素中。如果您在 33 分钟后开始this video,您将能够看到这是如何实现的。

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

        【讨论】:

        • 而不是仅仅使用链接,如果你可以在这里展示简单的代码示例,这样你就不必离开网站,更不用说浏览视频了,我会把答案切换到这个,因为看来点击识别器不是推荐的方式。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-16
        • 2021-02-12
        • 1970-01-01
        • 2021-04-29
        相关资源
        最近更新 更多