[VoiceOver] UIWebViewを一時的に無効化する

setIsAccessibilityElement:NO ではダメなのです。

UIWebViewは、scrollViewを持っていて、その中にwebサイトが表示されてる感じです。scrollView直下ではなくて、更に階層があるような。

そもそもUIWebViewは、AccessibilityElementではない。
中に表示される内容が、AccessibilityElement。

やりたいこと

UIWebViewに違うViewを重ねた場合、そのViewだけ感知されるようにしたい。

UIWebView側にフォーカスがあわないようにさせたいのです。

単にUIWebViewを表示中に別のViewを重ねて表示させると、裏にあるUIWebViewも選択可能になります。
※VoiceOverではない時は、選択やタップはできません。
IMG_4568.JPG

右上完了ボタンも選択できるけど、ダブルタップしても動作はしない。

選択できなくするには

UIWebViewも、UIWebView.scrollViewも、どちらもAccessibilityElementではないので、isAccessibilityElementのプロパティは意味がないです。

逆にIsAccessibilityElementをYESにしてしまうと、自身がひとつのAccessibilityElementとして選択されるようになり、中のコンテンツは選択できなくなります。

うーむ、どうすればいいのか!

そんな場合のプロパティ値 AccessibilityElementsHidden がありました。

UIWebViewをVoiceOverでフォーカスされなくするには、YES

    [self.webView setAccessibilityElementsHidden:YES];

またフォーカスさせたい時は、

    [self.webView setAccessibilityElementsHidden:NO];

setAccessibilityElementsHidden:YES で、前面のViewだけが選択できるようになりました。よかった。
IMG_4569.PNG

画面上部は別のViewですが、同じプロパティ設定です。
VoiceOver判別を入れておくとよさそう。

    if(UIAccessibilityIsVoiceOverRunning()){
        [self.webView setAccessibilityElementsHidden:YES];
        [self.webHeaderView setAccessibilityElementsHidden:YES];
    }

上記画像のアプリはShiori Webブラウザですが、現在、VoiceOver対応中です。
次回の更新でほぼ対応される予定です。

シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメントをどうぞ

メールアドレスが公開されることはありません。