在我的 tvOS 应用程序中,我有一个集合视图,我在其中将其remembersLastFocusedIndexPath
设置为 true
.由于这还不足以获得此行为,因此我还覆盖了UIViewController
中的一种方法,如下所示:
override weak var preferredFocusedView: UIView? {
return collectionView
}
这工作正常,直到我出于某些原因开始重新加载集合视图。如果集合视图可见,我调用collectionView.reloadData()
,它确实有效。
如果我在集合视图不可见时重新加载,例如,当我在点击其中一个项目后处于详细信息视图中时,这不起作用。当我返回到网格时,焦点索引路径不是我点击的路径。
作为解决方法,我正在管理此非理想方案:
- 由于重新加载是由来自后端的新数据触发的,因此我仅在集合视图可见时才调用
collectionView.reloadData()
(因为我知道最后一个焦点索引在这里不会更改(。 - 我在
viewDidAppear(animated: Bool)
中致电collectionView.reloadData()
,以便在用户回来时提供最新内容。
我怎样才能正确地做到这一点?提前谢谢。
最近我也遇到了这个问题,我的情况和你差不多。
我还在viewDidLoad
和viewWillAppear
中打电话给collectionView.reloadData()
然后
我从
collectionView.reloadData()
自
collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())
它在大多数情况下对我有用,仍然有大约 <5% 的机会搞砸最后一个焦点指数
一种选择是将remembersLastFocusedIndexPath
设置为 false
,并实现indexPathForPreferredFocusedViewInCollectionView:
以实现相同的行为。