9

iPhone アプリにアクセスできるようにしています。VoiceOver はかなり印象的です。ユーザーが VoiceOver を使用すると、画面上の項目が自動的に読み上げられ、ユーザーは画面上の任意の場所をダブルタップしてその項目を選択できるようになります。ただし、VoiceOver に特定の順序でアイテムを読み上げてもらいたいのですが、常に戻るボタンを含む UINavigationBar アイテムから始まります。これらの項目がまったく読まれないようにしたいのではなく、特定の項目から始めたいだけです。「firstResponder」に相当する VoiceOver はありますか?

4

2 に答える 2

6

はい

UIAccessibilityContainerNSObject によって実装されているというプロトコルがあります。次の 3 つの方法を使用して、コンテナーの動作をカスタマイズできます。

  • accessibilityElementCount
  • accessibilityElementAtIndex:
  • indexOfAccessibilityElement:

アクセシビリティ要素の順序を制御したいメイン ビューがある場合は、これら 3 つのメソッドを実装して、適切なビュー/インデックスを返すだけです。もう 1 つのことは、コンテナ ビュー自体がアクセシビリティ要素になることはできないため、オーバーライド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;
}
于 2013-03-25T11:39:12.320 に答える
0

場合によっては、1つのアイテムにUIAccessibilityTraitSummaryElementを設定するとこれが可能になります。(私のゲームはダイナミックすぎて、これではあまり役に立ちません。)

于 2011-10-05T23:32:47.360 に答える