2017-06-22 10 views
2

私のアプリでは、私はUITableViewの非同期データ読み込みを持っています。ビューコントローラがロードされると、私はモーダルアクティビティスピナーを表示し、HTTPリクエストを開始します。それが完了したら私はスピナーを隠し、テーブルビューでreloadData()を実行します。また、データがまだ準備されていないときに最初に空のリストを確認するために、行番号としてresponse?.count ?? 0を返します。VoiceOverと非同期UITableView

これは魅力的ですが、私はVoiceOverに問題があります:View Controllerを開くとき、VoiceOverがテーブルに入り、「空のリスト」と表示されます。データがロードされると、テーブルの最後の要素に移動します。

この動作はあまり最適ではありません:VoiceOverが空のときにVoiceOverにテーブルをフォーカスしないようにします(ロード時にサウンドが既に存在するため、モーダルスピナーにフォーカスする必要はありません)それがロードされたとき。

どうすればよいですか?

+0

問題の内容がすぐにわかりません。 VoiceOVerのフォーカスコントロール、またはViewControllerのロードで何が起こるか。 VoiceOverから目に見えるビューを隠すべきではありません。そこにテーブルがあり、それが空であるという事実は重要です。さて、これはおそらく、これはViewControllerがロードする2番目のものを共有するべきではなく、動的なコンテンツの懸念があるということです。あなたは最初に焦点を当ててもっと賢明な何かをすることができるかもしれません...しかしあなたの説明を与えられたあなたのレイアウトとあなたの実際の問題を理解することは難しいです...写真? – ChrisCM

+0

これは、完全なUITableViewを持つ空のViewControllerです。それがコントローラ内の唯一のビューであるため、読み込み中に空のリストがあると言っても意味がありません。アプリケーション内のどこでも再生できる特定の読み込み音があります。 VoiceOverは画面に表示される内容を説明していますが、読み込み中に空のリストがありませんということを理解しています。 – natinusala

+0

そこにリストがあれば、アクセス可能でなければなりません。それが関連していない場合、なぜスクリーンでも???で始まるのですか?あなたが "経験を汚染しない"ようにしたいのであれば、そこにデータがあるまで誰もからリストを隠す。汚染された経験が何であるか知りたいですか?部分的に目に見えるユーザーは、ViewControllerのビューを「見て」、より多くの情報を求めて、ビューに指を入れて役に立つフィードバックを期待していますが、VoiceOverからそのビューを非表示にしています。それは汚染された経験です。 – ChrisCM

答えて

1

ローディングオーバーレイ画面をモーダルビューとして設定する必要があります。モーダルとは、ビューの背後にあるものが実行可能でないこと(またはVoiceOverによってフォーカス可能)を意味します。

//Instantiate a view controller with your loading spinner. 
_modalDialogViewController = [[UIStoryboard storyboardWithName:@"ModalDialog" bundle:[NSBundle mainBundle]] 
         instantiateViewControllerWithIdentifier:@"AccessibleSpinnerModal"]; 

//Make this view controller modal, meaning only things on this screen will be actionable/focusable. 
_modalDialogViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext; 

これらのいずれのスタイルでも、アクセシビリティ通知を使用する必要があります。

//Announce that content is loading directly 
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, "Stuff is laoding"); 

それとも

//Shift focus to the view in your modal that is sharing the status of the loading content. 
UIAccessibilityPostNotification(UIAccessibilityLayoutChanged, spinnerView); 

これはフォーカスがそのビューに移動します。

+0

'UIActivityIndi​​catorView'をストーリーボードなしで直接使用することで、同じことを達成できますか? – natinusala

+0

ええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええん、正直なところ、アクセシビリティAPIを使って直接的に物を非表示にする方法があります。しかし、彼らはハックです、そして、他のATのためのアクセスできない解決につながります。これは正しい解決策です。使用する必要があります.XIBにスピナーを追加して、それを正しく実行することは、私が本当に欲しくないばかげたアクセシビリティAPIのハックである「コードラインの最小限のソリューション」ソリューションに対する最小限の労力です「正しい」非ハックソリューションが利用可能であり、明らかに正しい選択である場合には、 – ChrisCM

関連する問題