Может ли кто-нибудь ясно объяснить UIView, что UIAccessibilityConvertFrameToScreenCoordinates ожидает своего второго аргумента? Иногда он ведет себя так, как я ожидал, рисуя прямоугольник фокуса VoiceOver над соответствующим элементом, но в других случаях использование этой вспомогательной функции просто похоже на вуду!Какой вид следует использовать для UIAccessibilityConvertFrameToScreenCoordinates?
Документация от 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];
}
Надеюсь, это имеет смысл для кого-то. Заранее спасибо.
Спасибо, Крис. Я буду использовать его, используя эту информацию. – dotjay