配音只能看到一个uicollectionview的页面

ste*_*hen 12 cocoa-touch ios voiceover uiaccessibility uicollectionview

所以我有一个UICollectionView,其中包含一组使用自定义UILayout显示的UICollectionViewCells.

我已经将UILayout配置为布局所有UICollectionViewCells几乎与它们在ios上的照片应用程序中的布局方式完全相同.

问题是,当打开语音时,用户正在使用滑动遍历UICollectionViewCells,当用户到达页面上的最后一个可见单元格并尝试向前滑动到下一个单元格时,它就会停止.

我知道在UITableView中,单元格将继续向前移动,表格视图将自动向下滚动.

有谁知道如何获得这种行为?

Bri*_*gun 20

这个答案对我也有用.谢谢!

您必须启用另一个调用才能使其正常工作.否则,您的方法(void)accessibilityElementDidBecomeFocused永远不会被调用.您必须在对象Cell上启用辅助功能.

  1. 选项1:在ViewController中,将单元实例设置为具有辅助功能.

    Cell *cell = [cv dequeueReusableCellWithReuseIdentifier:kCellID forIndexPath:indexPath];
    [cell setIsAccessibilityElement:YES];
    
    Run Code Online (Sandbox Code Playgroud)
  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);
    }
    
    Run Code Online (Sandbox Code Playgroud)


ste*_*hen 12

After hours and hours of headache, the solution was really simple. If anyone else comes across a similar problem, this is what i did:

在您用于CollectionView的UICollectionViewCell的子类中,覆盖accessibilityElementDidBecomeFocused并实现它,如下所示:

- (void)accessibilityElementDidBecomeFocused
{
    UICollectionView *collectionView = (UICollectionView *)self.superview;
    [collectionView scrollToItemAtIndexPath:[collectionView indexPathForCell:self] atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally|UICollectionViewScrollPositionCenteredVertically animated:NO];
    UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil);
}
Run Code Online (Sandbox Code Playgroud)