辅助功能收藏重新加载时查看焦点变化,iOS

w8ntj3qf  于 2023-02-06  发布在  iOS
关注(0)|答案(3)|浏览(100)

我正在研究一个日历的可访问性,它实际上是一个collectionView。每当点击一个单元格时,collectionView将通过调用

[self.collectionView reloadData];

问题是如果画外音正在运行,则在点击单元格后焦点将移动到另一个地方,因为该单元格在其他地方被重用。
在reloadData之后,是否有办法保持焦点在原来的位置?谢谢!

kkih6yb8

kkih6yb81#

只要找到一个解决办法就可以了。焦点被更改是因为在执行[collecionView reloadData]时,焦点单元格在其他地方被重用。
因此,如果我们逐个重新加载collectionViewCells,则聚焦的单元格将不会在其他位置使用。我调用此方法是为了在运行VoiceOver时重新加载collectionView。

- (void)reloadCalendarCollectionView {

  NSInteger items = [self.calendarItems count];

  for (NSInteger i = 0; i < items; i++) {
    [self.collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:i inSection:1] ]];
  }

}
r55awzrz

r55awzrz2#

你可以尝试在重载数据之前执行self.collectionView.accessibilityElementsHidden = YES,然后,当它完成时,你将不得不执行相反的操作&然后为你正在寻找的单元格发布一个通知。

u5rb5r59

u5rb5r593#

我们有一个集合视图,这个集合视图每秒重新加载数据。当用户点击单元格时,焦点在每次重新加载后都会改变,所以集合视图单元格在indexPath选择了错误的单元格。
在单元格中创建委派协议:

protocol AccessibilityCellProtocol{

    func accessibilityFocused(cell:UICollectionViewCell)
   
}

覆盖可访问性ElementDid在单元格中成为焦点:

override class func accessibilityElementDidBecomeFocused(){
    self.delegate.accessibilityFocused(cell:self)
}

在视图控制器中创建一个selectedIndexPath变量,用委托方法赋值。

func accesibilityFocused(cell:UITableViewCell){
    selectedIndex = collectionView.indexPath(for: cell)
}

在didSelectItemAtIndexPath方法中:

if UIAccessibility.isVoiceOverRunning{
    cellTappedWith(indexPath:selectedIndex)
    return
}
cellTappedWithIndexPath(indexPath:indexPath)

相关问题