UIAccessibility объявляет n из n элементов в пользовательских представлениях - PullRequest
0 голосов
/ 15 февраля 2019

Когда вы добавляете UISegmentedControl к представлению, UIAccessibility сфокусируется на нем и скажет:

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

У меня есть пользовательский элемент управления, который имеет UIButtons, переключение которого аналогично UISegmentedControl.Но я пытаюсь понять, как заставить Voice Voice объявить n of n в конце.

Самое близкое, что я обнаружил, это присвоить .accessibilityTraits = .tabBar для контейнера.Проблема в том, что он объявляет:

"ItemName Button Tab 2 of 2"

Но для соответствия нашим рекомендациям по доступности мы не можем объявить «вкладку».

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

Shortпростого написания пользовательского accessibilityLabel есть ли в UIAccessibility что-нибудь, способное обработать эту логику?

1 Ответ

0 голосов
/ 17 июня 2019

У меня есть пользовательский элемент управления, который имеет кнопки UIB, переключение которых аналогично UISegmentedControl.Но я пытаюсь понять, как заставить Voice Voice объявить n of n в конце.

  • Поместите каждый из ваших UIButton элементов в accessibilityElements массив пользовательского элемента управления, который действует как контейнер.
  • При поиске определенного элемента в этом массиве у вас будет индекс 'x' внутри общего количества 'N' кнопок: "кнопка имени элемента x из N ".
  • В вашем UIButton установите accessibilityLabel, вставив результат предыдущего исследования.

enter image description here Вот такая логика, которая должна помочь вам достичь своей цели с помощью небольшого кода, как показано ниже, например (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!)
        }
    }
}
...