如何在 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 视图的另一部分。所以我重用单元格并看到相同的焦点 indexPath(12 行)。所以集合视图滚动到这个项目。
我试图在
中重置 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
}
所以在那之后焦点工作正确。
我有 table 视图,其中嵌套集合视图(水平滚动)进入 table 视图单元格。类似的东西:
-table view:
- section
- cell:
- collection view
在开始屏幕上,我有 3 个部分,每个部分有 1 个单元格。当我尝试对单元格重复使用 1 个部分时,焦点项目的 indexPath 没有改变。
例如,如果我 select 1 节 1 单元格并在集合视图中聚焦 第 12 项,然后我以这种方式向下滚动 table 视图我更改了焦点项目并切换到 table 视图的另一部分。所以我重用单元格并看到相同的焦点 indexPath(12 行)。所以集合视图滚动到这个项目。
我试图在
中重置 preferredFocusEnvironmentsoverride 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
}
所以在那之后焦点工作正确。