Почему свойство subviews UISegmentedControl возвращает больше значений, чем свойство numberOfSegments? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть небольшая ошибка, которая вызывает сбой. Мне нужно применить функции доступности к сегментам в UISegmentedControl.

Насколько я знаю, единственный способ получить доступ к сегментам из UISegmentedControl - через его свойство subviews, которое должно возвращатьмассив типа UISegment.

Но с двумя сегментами на сегментированном элементе управления subviews возвращает два UISegment с и два UIImageView с, в общей сложности четыре значения.

extension UISegmentedControl {

    func applyAccessibiltyFeatures() {

        // subviews should return an array of type UISegment
        for (index, view) in self.subviews.enumerated() {

            // This line crashes
            if let title = self.titleForSegment(at: index) {

                // Do something with accessibility
                view.doSomething(title: title)

            }     
        }
    }
}

Сбой вызван попыткой доступа к заголовку для UISegment, который не существует. Это выходит за пределы, поскольку свойство subviews возвращает четыре значения, даже если в сегментированном элементе управления есть только два сегмента. (Два UISegments и два UIImageViews.)

У меня есть исправление, помогающее остановить сбой, но я не могу гарантировать, что функции доступности активируются.

func applyAccessibiltyFeatures() {

        // This guarantees that we don't go out of bounds, but 
        //if the first two subviews are the UIImageViews, then it doesn't matter
        for index in 0..<self.numberOfSegments {
            let view = self.subviews[index]

            if let title = self.titleForSegment(at: index) {

                // Do something with accessibility
                view.doSomething(title: title)

            }     
        }
    }

Я пытался использовать contactMap для фильтрации подпредставлений до UISegment с, но UISegment является частным и недоступным.

Почему свойство subviews может возвращать дополнительные двазначения?

...