48

コード ベースを調べて、すべてのボタンとテキスト フィールドに accessibilityIdentifier プロパティを設定して、UIAutomation を使用してそれらにアクセスできるようにしました。これを行っているときに、既に配置されているコードに出くわしました。

[_goodButton setAccessibilityLabel:@"off"];

これら 2 つの方法の違いに関するドキュメントは見つかりません。彼らは同じことをしているように見えます。誰か知っていますか?このラベルも「オフ」に設定されているのは奇妙です。

4

4 に答える 4

93

これらの 2 つのプロパティについては、間違いなく混乱があります。私自身もまったく同じ罠に陥りましたが、VoiceOver と UI オートメーションのテストに関する調査と実験により、明らかな違いがあることがわかりました。

accessibilityLabel
これは、VoiceOver によってエンドユーザーに読み取られる値、または他のアクセシビリティ ツールを通じて公開される値です。そのため、これはローカライズされた文字列である必要があります。可能であれば、それが何であるかを説明する 1 つの単語 (つまり、「ヘルプ」、「プレイ」、「新しいメモ」など) に留めておくのが最善です。また、大文字にする必要がありますが、ピリオドで終わらせないでください。これは、VoiceOver の発音に役立ちます。

これはエンドユーザー向けであるため、ユーザーテストの一環として、開発者は必要に応じてこれをより明確にするために変更できます。たとえば、「再生」から「コメントを読む」に変更される場合があります。そのため、これを自動化テストに関連付けることは望ましくありません。そのような変更は、現在存在しない 'Play' ラベルを参照するすべてのテストを壊してしまうからです。そこにaccessibilityIdentifier出番です。

accessibilityIdentifier
accessibilityLabelエンドユーザー向けですがaccessibilityIdentifier、対照的に開発者向けのみであり、主に UI 自動化およびテスト ツールにアクセス可能な要素を識別するために使用されます。そのため、ローカライズしないでください。

開発者は、エンド ユーザーではなく、UI テストのコンテキストでのみ意味のある値を使用する必要があります。たとえば、ヘルプ トピックを表示するボタンは、'HelpButton' という識別子を持つことができます。これは、それが何を識別するかは明確ですが、エンド ユーザーがこれまで公開する必要があるものではないためです。

この値を使用する習慣をつけてください。そうすることで、ローカリゼーションや への変更によって UI 自動化テストが壊れることがなくなりますaccessibilityLabel

アクセシビリティヒント(完全を期すためのものを含む)
accessibilityHintaccessibilityLabel、単独では十分に明確でない可能性がある場合のためのものです。accessibilityLabel可能であれば、単一の単語にとどめるべきであるためaccessibilityHint、追加のコンテキストを提供できます。ただし、 だけで十分な表現力がある場合は、空白accessibilityLabelのままにしておく必要があります。accessibilityHint

accessibilityHint必要であると判断された場合は、これを単純で短い文の断片にし、大文字を使い、ピリオドで終わらせます。何をするかを説明するのではなく、何をするかを説明する必要があります (つまり、「現在のトラックを再生します。」ではなく、「現在のトラックを再生します。後者は、何をするかではなく、指示のように聞こえるためです。)」

これがどのように使用されるかというと、VoiceOver は最初にラベルを読み上げ、少し一時停止してからヒントを読み上げます (例: 「再生... 現在のトラックを再生します。ユーザーがヒントを無効にすると、もちろん単に「再生」と表示されます)。

それが役立つことを願っています!

于 2016-08-30T15:06:49.563 に答える
35

accessibilityLabel(以下を参照) を使用する代わりに、 を使用する必要がありますaccessibilityIdentifier

このgithub issueは違いを説明しています:

accessibilityLabel が、アクセシビリティ スクリーン リーダーによって実際に使用される(デバイス ユーザーの言語にローカライズする必要がある)外向きの文字列であることを考えると、Apple は UI オートメーションの目的専用の代替プロパティ(iOS 5 以降)を提供するようになりました。

于 2014-01-16T03:29:11.033 に答える
5

あなたはこれをチェックします

アクセシビリティのラベルと識別子の属性 label 属性と identifier 属性は、UI 要素にアクセスするスクリプトの能力に大きく影響します。それらがどのように使用されているかを理解することが重要です。

label 属性に意味のある値を設定することはオプションですが、推奨されます。ラベル文字列は、Interface Builder の ID インスペクターの [アクセシビリティ] セクションにある [ラベル] テキスト フィールドで設定および表示できます。このラベルは説明的ですが、短くする必要があります。これは、Apple の VoiceOver などの支援技術が関連付けられた UI 要素の名前として使用するためです。UI オートメーションでは、このラベルは label メソッドによって返されます。また、identifier 属性が設定されていない場合、name メソッドによってデフォルトとして返されます。詳細については、UIAccessibilityElement クラス リファレンスを参照してください。

identifier 属性を使用すると、要素によりわかりやすい名前を使用できます。これはオプションですが、スクリプトが次の 2 つの操作のいずれかを実行するように設定する必要があります。

コンテナ ビューに名前でアクセスしながら、その子にもアクセスできます。UILabel ビューに名前でアクセスして、表示されたテキストを取得します (value 属性を介して)。UI オートメーションでは、name メソッドはこの識別子属性の値を返します (設定されている場合)。設定されていない場合、name メソッドは label 属性の値を返します。

現在、identifier 属性の値は、accessibilityIdentifier プロパティを介してプログラムでのみ設定できます。詳細については、UIAccessibilityIdentification プロトコル リファレンスを参照してください。

于 2014-01-16T06:56:49.143 に答える