3

UITableViewCellカスタムクラスにアクセシビリティを実装しています。内部にいくつかのボタンがあるかなり単純なオーバーフロー メニューがあります。これらのボタンは、スライドして開いてオーバーフローを閉じる省略記号ボタンが押されるまで非表示になっています。

私のセルのイニシャライザaccessibilityElementsHiddenで、私のoverflowContainerを に設定していYESます。VoiceOver を使用してスクロールすると、これらのビューはスキップされます。

次に、セルを開くときに、UIViewアニメーションの完了ハンドラーでaccessibilityElementsHidden、同じoverflowContainerことを NO に設定します。これは効果がないようです。これらの要素はまだスキップされています。

UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)を変更する前/後/変更したときにも投稿しようとしましaccessibilityElementsHidden BOOLたが、これも状況に影響を与えていないようです。

基本的に、特定の時点でaccessibilityElementsHiddenいくつかのインスタンスをオンにしたいと思います。UIView誰かが私が間違っているかもしれないことを教えてもらえますか?

オーバーフローが開いたときに起動するコードは次のとおりです。

- (void)cellOverflowDidShow:(MyCell *)cell
{
    self.overflowContainer.isAccessibilityElement = YES;
    self.firstButton.isAccessibilityElement = YES;
    self.secondButton.isAccessibilityElement = YES;
    self.thirdButton.isAccessibilityElement = YES;
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.firstButton);
}

セルを閉じると、反対のことが発生します(すべてをに設定してNO、通知を再度投稿します)。そして、セルを初期化するとき、私が設定したのは次のとおりです。

self.overflowContainer.isAccessibilityElement = NO;

なぜそれが機能しないのかまったくわかりません。私はすべてを100%正しく行っているようです。イニシャライザで行を設定しないと、すべてのボタンに (常に) アクセスできるように見えます。そのため、 itYESまたはの最初の呼び出しはNO機能しているように見えますが、後続の呼び出しは無視されます。

4

1 に答える 1

2

可視状態では、オーバーフロー コンテナーをアクセシビリティ要素として宣言します。したがって、VoiceOver を使用すると、ユーザーは子要素をナビゲートするのではなく、フォーカスすることができます。アクセシビリティ要素かどうかを切り替える代わりに、その子である firstButton、secondButton、および thirdButton のアクセシビリティをself.overflowContainer.isAccessibilityElement設定したままにして切り替えます。NO

子要素のアクセシビリティを設定するための略記は ですaccessibilityElementsHidden。ビューが表示されたときと表示されなくなったときに設定self.overflowContainer.accessibilityElementsHiddenしてみてください。NOYES

いずれにしても、レイアウト変更通知をトリガーする必要がある場合があります。

于 2014-08-14T19:03:43.737 に答える