web-dev-qa-db-ja.com

VoiceOver:画面遷移後にユーザー補助要素を強制的に選択します

IOSアプリをアクセシブルにする作業を進めており、ほぼ完成しています。私のアプリにはいくつかのカスタム画面遷移が含まれており、VoiceOverがオンの場合、遷移後に説明する左上の要素、または場合によってはランダムな要素のいずれかを選択するようです。 UIAccessibilityTraitSummaryElementは有望に見えましたが、私が理解しているように、アプリが起動したときにのみ機能し、任意の遷移の後では機能しません。

要素にVoiceOverフォーカスが与えられる優先順序を指定するためのアクセシビリティ特性またはプロパティはないようです。 VoiceOverフォーカスを強制する方法はありますか?

17
kevboh

EDIT: iOS 6が利用可能になり、kevbohが述べたように、UIAccessibilityLayoutChangedNotificationまたはUIAccessibilityScreenChangedNotificationを投稿するときに引数を渡すことができるようになりました。

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, myAccessibilityElement);

myAccessibilityElementは、ほとんどの場合、isAccessibilityElementがYES(多くのビューのデフォルト)に設定されたUIViewになります。

または、iOS6 UIAccessibilityTraitHeaderで追加された新しいトレイトをアクセシビリティ要素のaccessibilityTraitsに追加することもできます。これにより、同じ結果が得られるはずです(ただし、これはまだテストしていません)。

ORIGINAL: iOS 6にはまだNDAの下にあるため、ここでは説明できない新しいAPIがありますが、WWDC 2012の「AccessibilityforiOS」ビデオ(セッション210)にあります。

ただし、これに失敗した場合の回避策は、アナウンスを手動でトリガーして、デフォルトのフォーカスされたアクセシビリティラベルのアナウンスを上書きすることです。

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"Your text");
19

このおかげで、VoiceOverフォーカスを強制し、必要に応じて要素を並べ替える興味深い説明が提供されます アクセシビリティ推奨サイト

コンテンツの変更を通知する

現在のページでコンテンツが変更された場合、いくつかのタイプの通知を使用してアクセシビリティAPIに通知することができます。これを行うには、メソッドUIAccessibilityPostNotificationを使用してユーザー補助APIに変更通知を送信する必要があります。

変更通知にはいくつかの種類がありますが、最も一般的に使用される2つは次のとおりです。

  • UIAccessibilityLayoutChangedNotification:ページの一部が2つの可能な入力パラメーター(NSStringまたはUIObject)で変更されたことを通知します。 NSStringを使用すると、通知はVoiceOverの発声を伴うUIAccessibilityAnnouncementNotificationのように動作します。 UIObjectを使用すると、フォーカスはユーザーインターフェイス要素に移動します。この通知はUIAccessibilityAnnouncementNotificationと非常によく似ていますが、動的コンテンツが削除されるか、現在のビューに追加された結果として発生するはずです。
  • UIAccessibilityScreenChangedNotification:入力パラメーターとしてnilまたはUIObjectを含むページ全体が変更されたことを通知します。 nilを使用すると、ページ内の最初のアクセス可能な要素がフォーカスされます。 UIObjectを使用すると、VoiceOverを使用して指定した要素にフォーカスが移動します。この通知には、新しいページを発表するような音を含む発声が伴います。

READING ORDER

VoiceOverの読み取り順序の再定義は、UIAccessibilityContainerプロトコルを使用して行われます。アイデアは、要素の読み取り順序を定義する要素のテーブルを持つことです。 shouldGroupAccessibilityElement属性を使用すると非常に便利なことがよくあるので、正確な順序がありますが、ビューの一部のみ(ビューの残りの部分はVoiceOverが提供するネイティブオーダーを使用して読み取ります)。

この機能を説明する最良の方法は、キーの順序が適切なものである必要のないキーボードです。希望する順序は次のとおりです:1、2、3、4、7、6、8、9、5。2つのビュー(青と灰色)が作成され、以下に定義されているように番号がグラフィカルに配置されます: enter image description here

イラストと コードスニペット (Swift&ObjC)も、これら2つの説明を定義するために利用できます。

5
XLE_22