如何在 tvOS 中使用嵌套集合视图更改重用 table 视图单元格的焦点?

How change focus in reused table view cell with nested collection view in tvOS?

我有 table 视图,其中嵌套集合视图(水平滚动)进入 table 视图单元格。类似的东西:

-table view: 
  - section
   - cell: 
    - collection view

在开始屏幕上,我有 3 个部分,每个部分有 1 个单元格。当我尝试对单元格重复使用 1 个部分时,焦点项目的 indexPath 没有改变。

例如,如果我 select 1 节 1 单元格并在集合视图中聚焦 第 12 项,然后我以这种方式向下滚动 table 视图我更改了焦点项目并切换到 table 视图的另一部分。所以我重用单元格并看到相同的焦点 indexPath12 行)。所以集合视图滚动到这个项目。

我试图在

中重置 preferredFocusEnvironments

override func prepareForReuse()

但是没有结果。而当我设置为 false collectionView.remembersLastFocusedIndexPath = false 时并没有帮助我解决问题。我该如何解决这个问题?

我发现问题出在 collectionView 的 contentOffset 中。当我重新使用 tableViewCell 时,我没有重置 collectionView 中的偏移量。因此,我将每个 collectionView 的所有偏移量保存在 tableViewCell 中,并通过键将此值设置为 collectionView。像这样(在 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 中):

return tableView.dequeueReusableCell(cellClass: HomeTableViewCell.self, for: indexPath).adjust {

    if let id = [=10=].feedID {
      contentOffsets[id] = [=10=].collectionView.contentOffset
    }
    [=10=].preprareForDisplay(feed: feeds[indexPath.section)
    [=10=].collectionView.contentOffset = contentOffsets[feeds[indexPath.section].origin.id] ?? .zero
  }

所以在那之后焦点工作正确。