6

I am creating view based application, where i will be going to next view, via addSubview method. The problem is, when I turn the feature of VoiceOver ON, and addsubviews, it takes the accessory labels from previous views. That is , if I click on view at the rect, where there is label in previous view, then also, VoiceOver will detect it as accessibility label and start reading that label. But, If I use, navigation controller to go to next view controller, I don't get any problem. Can anyone please tell me, if apple itself has supported VoiceOver facility only for navigation based application, or there is some other solution for VoiceOver in view based applications ?

PS I have tried the same on some demo apps also, but same results.

そのため、現在のビューでボタンを含むサブビューを追加すると、アクセシビリティはサブビューの背後にあるラベルも読み取ります。追加されたビューのボタンを読み取るためのアクセシビリティと、前のビューの表示可能な部分の残りの部分のみが必要です(ラベルが追加されたビューの後ろに隠れることはありません)。それがiPhoneのナレーションのバグである場合、デフォルトでは、 addsubview でparentViewのラベルも読み取ることを誰かが言うことができますか?

4

4 に答える 4

8

ビューがビュー階層にある場合、その上にある別のビューによって隠されていても、VoiceOver はそれを検出します。

前のビューの上に新しいビューを追加するだけで、コンテンツの別の画面に移動するべきではありません。アプリの各画面は、UIViewController単なる ではなく、 である必要がありますUIView。これにより、多くの利点が得られます。そのうちの 1 つは、View Controller が画面外にあるときにビューを自動的にアンロードし、メモリ警告があることです。

アプリの画面間の遷移を管理するには、ナビゲーション コントローラー (または独自のカスタム コントローラー) のようなコンテナー コントローラーを使用する必要があります。必要に応じて、ナビゲーション バーとトランジション効果を無効にして、それを使用してビューのスタックを管理することができます。新しいビュー コントローラーをスタックにプッシュすると、前のビュー コントローラーは削除され、問題は解消されます。

したがって、画面とビューの管理方法を真剣に再考する必要があります。UIViewControllerある種のコンテナの中にいるのが道です。少なくとも、新しいビューを画面に追加するときは、古いビューを削除する必要があります。

于 2012-03-27T13:24:57.547 に答える
5

ビューの accessibilityViewIsModal プロパティを YES に設定できます。

@property (非アトミック) BOOL accessibilityViewIsModal NS_AVAILABLE_IOS(5_0);

受信ビューがアクセシビリティによってモーダルと見なされるかどうかを通知します。YES の場合、このビューの外にある要素は無視されます。このビュー内の要素のみが公開されます。デフォルト == いいえ

したがって、追加するビューが何であれ、accessibilityViewIsModal を YES / true に設定します。

view.accessibilityViewIsModal = YES

于 2016-03-02T05:34:57.240 に答える
4

この画面変更通知を使用する

UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil);

特定のオブジェクト/ビューにフォーカスする必要がある場合は、それらを nil の場所に渡します。

于 2014-01-10T09:01:30.807 に答える
3

私はあなたと同じ問題を抱えていましたが、これを解決するために時間を費やしました。ビュー A の上にビュー B を追加しても、ビュー A は非表示になりません。ビューはそこに続き、voiceOver の期待どおり、そのビュー/ラベルが読み上げられます。

Xcode が提供するデバッグ ビューを使用して、この種の問題を確認できます。voiceOver がラベルをどのように認識するかを示す例を書きました。

addSubview を使用すると、ビューの階層は次のようになります。

概要

この場合、Hello Stack! を使用したコンテナー ビューです。ラベルは Hello World ラベルの上にあります。ユーザーには、Hello World というラベルは表示されません。ただし、voiceOver はそのビューを見ることができます。

さて、問題が判明したので、解決策は次のとおりです。別のビューにビューを追加するときはいつでも、最初に前のビューを非表示にします。次に、xcode のデバッグ ビューを使用して、ビューの状態を確認します。

私が示したエラーを修正する方法を示すために、それを修正します。

コード内: ここに画像の説明を入力

デバッグ ビュー:

  • 最初のラベル: postimg.org/image/cabhadzrl/
  • 2 番目のラベル: postimg.org/image/nsldgjb41/5605fbcd/

ご覧のとおり、ラベルの間にビュー コンテナーを追加しましたが、このビューは単に階層のビジョンを改善するためのものです。

于 2015-05-26T18:02:56.570 に答える