UITableView のアクセシビリティがどのように機能するかを理解しようとしています (同様の方法で機能する他のライブラリにサポートを追加するため)。そこで、UITableView のMyTableViewサブクラスにUIAccessibilityContainer Protocolを実装しました。
まず、dataSource をアクセス可能にする必要があります。
- (id<UITableViewDataSource>)dataSource
{
return (id<UITableViewDataSource>)[self valueForKey:@"_dataSource"];
}
次に、再実装します。
- (NSInteger)indexOfAccessibilityElement:(id)element
{
return [[self indexPathForCell:element] row];
}
- (NSInteger)accessibilityElementCount
{
return [[self dataSource] tableView:self numberOfRowsInSection:0];
}
アクセシビリティは想定どおりに機能します。最後のステップは- (id)accessibilityElementAtIndex:(NSInteger)indexを実装することです:
- (id)accessibilityElementAtIndex:(NSInteger)index
{
return [[self dataSource] tableView:self cellForRowAtIndexPath:[NSIndexPath indexPathForRow:index inSection:0]];
}
しかし、どうやらテーブルビューにこのメソッドのアクセシビリティを追加すると機能しなくなり、(ナレーションを使用して) テーブルビューに移動すると、VoiceOver の「空のリスト」だけが表示されます。面白いことに、セルは適切に返され、大量のAX ERROR: Could not find my mockparent が表示されます。おそらく私は古いです。
私は調査しようとしています。誰かがすぐにアイデアを思いつかない限り、結果を投稿します。