Да
Существует протокол под названием UIAccessibilityContainer
, который реализуется NSObject.Он позволяет настроить поведение контейнера с помощью этих трех методов:
accessibilityElementCount
accessibilityElementAtIndex:
indexOfAccessibilityElement:
Если у вас есть главное представление, где вы хотите управлять порядком элементов специальных возможностей, вы просто реализуете эти три метода и возвращаете подходящее представление / индекс.Еще одна вещь заключается в том, что контейнерное представление не может быть самим элементом доступности, поэтому вы должны переопределить isAccessibilityElement:
и вернуть NO
;
- (BOOL)isAccessibilityElement {
return NO;
}
Пример реализации
Я предлагаюу вас либо есть массив всех представлений в том порядке, в котором вы хотите, чтобы они отображались, либо используйте свойство tag
, если вы не используете его для чего-либо еще.Реализация протокола становится очень простой.
Массив элементов
Я предполагаю, что у вас есть массив с именем accessibleElements
, в котором элементы хранятся в правильном порядке.
- (NSInteger)accessibilityElementCount {
return self.accessibleElements.count;
}
- (id)accessibilityElementAtIndex:(NSInteger)index {
return self.accessibleElements[index];
}
- (NSInteger)indexOfAccessibilityElement:(id)element {
return [self.accessibleElements indexOfObject:element];
}
Помеченные элементы
Я предполагаю, что ваши подпредставления помечены непрерывно от 0 до количества подпредставлений.
- (NSInteger)accessibilityElementCount {
return self.subviews.count;
}
- (id)accessibilityElementAtIndex:(NSInteger)index {
// Not that self should have a tag<0 or tag>count otherwise it will
// return itself for that tag instead of the element you want it to.
return [self viewWithTag:index];
}
- (NSInteger)indexOfAccessibilityElement:(id)element {
return ((UIView *)element).tag;
}