web-dev-qa-db-ja.com

iOSのsetAccessibilityLabelとaccessibilityIdentifierの違いは何ですか?

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

[_goodButton setAccessibilityLabel:@"off"];

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

43
Tyler Pfaff

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

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

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

33
Joshua

これらの2つのプロパティには、間違いなく混乱があります。私自身も同じようなtrapに陥りましたが、VoiceOverとUI Automationテストの研究と実験で明らかな違いがあることがわかりました。

accessibilityLabel
これは、VoiceOverによってエンドユーザーに読み取られる値、または他のアクセシビリティツールを介して公開される値です。そのため、これはローカライズされた文字列である必要があります。可能であれば、これを単一のWordに保持することをお勧めします(つまり、「ヘルプ」、「プレイ」、「新しいノート」など)。大文字にする必要がありますが、ピリオドで終了しないでください。これは、VoiceOverの発音に役立ちます。

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

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

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

この値を使用することを習慣にしてください!そうすることで、ローカライズまたはaccessibilityLabelの変更によりUI自動化テストが中断しないようにします。

accessibilityHint(完全を含む)
accessibilityHintは、accessibilityLabelだけでは十分に明確でない場合があります。可能であれば、accessibilityLabelを単一のWordに保持する必要があるため、accessibilityHintは追加のコンテキストを提供できます。ただし、accessibilityLabelだけで十分に表現力がある場合は、accessibilityHintを空白にしておく必要があります。

accessibilityHintが必要であると判断された場合、これを、大文字で始まりピリオドで終わる単純な短い文の断片にしてください。それは何をすべきかを説明するのではなく、何をすべきかを説明する必要があります(つまり、「現在のトラックを再生する」ではなく「現在のトラックを再生する」。

お役に立てば幸いです!

63
MarqueIV

これをチェックします

アクセシビリティのラベルと識別子の属性ラベルの属性と識別子の属性は、UI要素にアクセスするスクリプトの能力を顕著に表しています。それらの使用方法を理解することが重要です。

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

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

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

現在、accessibilityIdentifierプロパティを介して、識別子属性の値をプログラムでのみ設定できます。詳細については、UIAccessibilityIdentification Protocol Referenceを参照してください。

4
Harunmughal

AccessibilityLabel VoiceOverによってエンドユーザーに読み取られる値です。そのため、これはローカライズされた文字列である必要があります。テキストも大文字にする必要があります。これはVoiceOverの発音に役立つからです。 accessibilityLabelはテストおよび視覚障害のあるユーザーに使用されます。

AccessibilityIdentifierアクセシビリティで要素を識別しますが、accessibilityLabelとは異なり、accessibilityIdentifierの目的はUIオートメーションテストの識別子としてのみ使用されます。 テストプロセスに値を使用

0
BuLB JoBs