【问题标题】:Collection view's last focused index path lost after reload data in tvOS在 tvOS 中重新加载数据后,集合视图的最后一个焦点索引路径丢失
【发布时间】:2016-01-29 11:08:18
【问题描述】:

在我的 tvOS 应用程序中,我有一个集合视图,我已将其 remembersLastFocusedIndexPath 设置为 true。由于这还不足以获得这种行为,我还在我的UIViewController 中重写了一个方法,如下所示:

override weak var preferredFocusedView: UIView? {
    return collectionView
}

在我出于某些原因开始重新加载集合视图之前,这一切正常。如果集合视图可见,我调用collectionView.reloadData(),它确实有效。

但是,如果我在集合视图不可见时重新加载,例如,当我在点击其中一个项目后处于详细视图中时,这不起作用。当我回到网格时,焦点索引路径不是我点击的那个。

作为一种解决方法,我正在处理这种不理想的情况:

  1. 由于来自后端的新数据触发了重新加载,因此我只在集合视图可见时调用collectionView.reloadData()(因为我知道最后一个焦点索引在这里不会改变)。
  2. 我在viewDidAppear(animated: Bool) 中调用collectionView.reloadData(),以便在用户回来时提供最新内容。

我怎样才能正确地做到这一点?提前致谢。

【问题讨论】:

  • 您能否将最后一个索引路径保存在您控制的另一个变量(即 int)中?有没有可以用来更新变量的委托方法?

标签: ios uicollectionview uikit tvos


【解决方案1】:

最近我也遇到了这个问题,我的情况跟你差不多。

我还在viewDidLoadviewWillAppear中调用了collectionView.reloadData()

然后

我变了

collectionView.reloadData()

collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())

它大部分时间都对我有用,仍然有大约

【讨论】:

  • 嗨,布雷克。不错的,一定要自己试试。我最终所做的是在 viewDidAppear 中重新加载集合视图,然后,当我(定期)接收到新数据或应用程序变为活动状态时,我仅在视图控制器可见时才重新加载集合视图。这是可怕的东西,但似乎到目前为止有效。
【解决方案2】:

一种选择是将remembersLastFocusedIndexPath 设置为false,并实现indexPathForPreferredFocusedViewInCollectionView: 以实现相同的行为。

【讨论】:

  • 有趣。在这里,我应该以某种方式保存焦点视图的索引路径,对吧?
  • 是的,使用一个属性来保存当前聚焦的索引路径并在collectionView中更新它:didUpdateFocusInContext:withAnimationCoordinator:
猜你喜欢
  • 2019-01-31
  • 2016-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 2022-01-09
  • 2022-12-12
  • 2020-09-19
相关资源
最近更新 更多