15

だから私は、カスタム UILayout を使用して表示される UICollectionViewCells のセットを持つ UICollectionView を持っています。

すべての UICollectionViewCells を、ios の写真アプリでのレイアウトとほぼ同じようにレイアウトするように UILayout を構成しました。

問題は、ボイスオーバーがオンになっているようで、ユーザーがスワイプを使用して UICollectionViewCells をトラバースしているときに、ユーザーがページの最後の表示セルに到達し、次のセルにスワイプしようとすると、単に停止することです。 .

UITableView では、セルが前方に移動し続け、テーブル ビューが自動的に下にスクロールすることを知っています。

この動作を取得する方法を知っている人はいますか?

4

4 に答える 4

22

この答えも私にとってはうまくいきました。ありがとう!

これを機能させるには、もう 1 つの呼び出しを有効にする必要があります。そうしないと、メソッド (void)accessibilityElementDidBecomeFocused が呼び出されることはありません。オブジェクト Cell でアクセシビリティを有効にする必要があります。

  1. オプション 1: ViewController で、セル インスタンスにアクセシビリティを設定します。

    Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
    [cell setIsAccessibilityElement:YES];
    
  2. オプション 2: セル オブジェクトにアクセシビリティ インターフェイスを実装します。

    - (BOOL)isAccessibilityElement
    {
        return YES;
    }
    
    - (NSString *)accessibilityLabel {
        return self.label.text;
    }
    
    - (UIAccessibilityTraits)accessibilityTraits {
        return UIAccessibilityTraitStaticText;  // Or some other trait that fits better
    }
    
    - (void)accessibilityElementDidBecomeFocused
    {
        UICollectionView *collectionView = (UICollectionView *)self.superview;
        [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
        UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
    }
    
于 2013-11-06T21:51:54.947 に答える
13

何時間もの頭痛の種の後、解決策は本当に簡単でした. 他の誰かが同様の問題に遭遇した場合、これが私がしたことです:

CollectionView に使用している UICollectionViewCell のサブクラスで、accessibilityElementDidBecomeFocused をオーバーライドし、次のように実装します。

- (void)accessibilityElementDidBecomeFocused
{
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}
于 2012-11-20T13:10:37.107 に答える
3

スティーブンの答えは私のために働いた! ありがとう。

これは iOS6 のみに影響するようです。iOS7で修正されたようです。

また、 nil の代わりに self を UIAccessibilityPostNotification に渡すことで、スクロールを少し速くきれいにすることができます-次のように:

- (void)accessibilityElementDidBecomeFocused {    
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self);
}
于 2013-10-02T23:00:58.783 に答える