У меня есть небольшая ошибка, которая вызывает сбой. Мне нужно применить функции доступности к сегментам в 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 может возвращать дополнительные двазначения?