Может ли кто-нибудь четко объяснить UIView, что UIAccessibilityConvertFrameToScreenCoordinates ожидает своего второго аргумента? Иногда он ведет себя так, как я ожидал, рисуя прямоугольник фокуса VoiceOver над соответствующим элементом, но в других случаях использование этой вспомогательной функции кажется просто вуду!
В документации Apple, похоже, нет объяснения. В нем указано, что аргументом должно быть представление, содержащее CGRect, но в некоторых реализациях неясно, какое представление является текущим контекстом CG. Есть ли простой способ решить эту проблему?
В качестве примера я создаю настраиваемый UITableViewCell, который имеет настраиваемый порядок фокусировки VoiceOver, переопределяя реализацию UIAccessibilityContainer ячейки (см. Ниже). AccessibilityFrame не работает, что бы я ни пытался. Я попытался отправить ссылку на связанный UITableView, родительский UIView, содержащий интерфейс, и само окно. Я чувствую, что просмотрел весь стек представлений!
Ниже приводится не полный код настраиваемого класса UITableViewCell, но он должен дать вам представление о том, что я пытаюсь сделать.
#pragma mark - Accessibility (UIAccessibilityContainer implementation)
- (id)accessibilityElementAtIndex:(NSInteger)index
{
return [self.accessibilityObjects objectAtIndex:index];
}
- (NSInteger)accessibilityElementCount
{
return self.accessibilityObjects.count;
}
- (NSInteger)indexOfAccessibilityElement:(id)element
{
return [self.accessibilityObjects indexOfObject:element];
}
- (void *)addAccessibilityElement:(UIView *)accessibleView{
if (self.accessibilityObjects == nil) {
self.accessibilityObjects = [NSMutableArray array];
}
UIAccessibilityElement *accessibilityElement = [[UIAccessibilityElement alloc] initWithAccessibilityContainer:self];
accessibilityElement.accessibilityLabel = accessibleView.accessibilityLabel;
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.contentView);
//accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.parentView); // parentView is a reference to the view controller's parent view
accessibilityElement.accessibilityFrame = UIAccessibilityConvertFrameToScreenCoordinates(accessibleView.frame, self.tableView); // tableView is a reference to the cell's UITableView
[self.accessibilityObjects addObject:accessibilityElement];
}
Надеюсь, это кому-то понятно. Заранее спасибо.