【问题标题】:UIAccessibility announcing n of n elements on custom viewsUIAccessibility 在自定义视图上宣布 n 个元素中的 n 个
【发布时间】:2019-07-09 19:48:07
【问题描述】:

当您将 UISegmentedControl 添加到视图时,UIAccessibility 将专注于它并说:

"(Selected) ItemName Button 1 of 2"
"ItemName Button 2 of 2"

我有一个自定义控件,它具有类似于UISegmentedControlUIButtons 切换。但我想弄清楚的是如何让旁白在最后宣布n of n

我发现最接近的是在容器上分配.accessibilityTraits = .tabBar。问题在于它宣布:

"ItemName Button Tab 2 of 2"

但为了符合我们的无障碍指南,我们不能让它宣布“标签”。

https://developer.apple.com/documentation/uikit/uiaccessibility/uiaccessibilitytraits/1648592-tabbar

除了编写自定义 accessibilityLabel 之外,UIAccessibility 中有什么东西可以处理这个逻辑吗?

【问题讨论】:

    标签: ios swift voiceover uiaccessibility


    【解决方案1】:

    我有一个自定义控件,它具有类似于 UISegmentedControl 切换的 UIButtons。但我想弄清楚的是如何让 Voice Over 在最后宣布 n 的 n。

    • 将每个UIButton 元素放入自定义控件的accessibilityElements 数组中,该控件的作用类似于容器。
    • 通过搜索此数组中的特定元素,您将在总共“N”个按钮中获得索引“x”:“项目名称按钮 x of N”
    • 在您的UIButton 中,通过插入先前研究的结果来设置accessibilityLabel

    这是一种逻辑,可以帮助您通过一些代码达到您的目的,例如 (Xcode 10.2.1, Swift 5.0, iOS 12)

    class ButtonsViewController: UIViewController {
    
        @IBOutlet weak var myCustomContainer: UIView!
    
        @IBOutlet weak var btn1: UIButton!
        @IBOutlet weak var btn2: UIButton!
        @IBOutlet weak var btn3: UIButton!
    
    
        override func viewDidAppear(_ animated: Bool) {
            super.viewDidAppear(animated)
    
            myCustomContainer.accessibilityElements = [btn1!, btn2!, btn3!]
            let nbButtons = myCustomContainer.accessibilityElements?.count
    
            for (index, elt) in (myCustomContainer.accessibilityElements?.enumerated())! {
    
                let btn = elt as! UIButton
                let btnName = btn.titleLabel?.text
    
                btn.accessibilityLabel = btnName! + String(index + 1) + " of " + String(describing: nbButtons!)
            }
        }
    }
    

    【讨论】:

      【解决方案2】:
      1. 设置容器视图的accessibilityTraits = .tabBar
      2. 设置容器视图的accessibilityElements = [button1, button2]
      3. 必要时设置每个按钮的accessibilityTraits = .selected 或.none

      【讨论】:

        猜你喜欢
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 2019-09-16
        相关资源
        最近更新 更多