ios - 在 tvOS 中重新加载数据后, Collection View 的最后一个聚焦索引路径丢失

标签 ios uicollectionview uikit tvos

在我的 tvOS 应用程序中,我有一个 Collection View ,我已将其 remembersLastFocusedIndexPath 设置为 true。由于这不足以实现此行为,我还在 UIViewController 中覆盖了一个方法,如下所示:

override weak var preferredFocusedView: UIView? {
    return collectionView
}

在我出于某些原因开始重新加载 Collection View 之前,这一切都很好。如果 Collection View 可见,我调用 collectionView.reloadData(),它确实有效。

但是,如果我在 Collection View 不可见时重新加载,例如,当我在点击其中一项后处于详细 View 中时,这是行不通的。当我回到网格时,聚焦的索引路径不是我点击的路径。

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

  1. 由于重新加载是由来 self 的后端的新数据触发的,所以我只在 Collection View 可见时调用 collectionView.reloadData()(因为我知道最后一个聚焦的索引不会改变在这里)。
  2. 我在 viewDidAppear(animated: Bool) 中调用 collectionView.reloadData() 以在用户返回时获得最新内容。

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

最佳答案

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

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

然后

我从

collectionView.reloadData()

collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())

它大部分时间对我有用,仍然有大约 <5% 的机会弄乱最后的焦点索引

关于ios - 在 tvOS 中重新加载数据后, Collection View 的最后一个聚焦索引路径丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35082981/

相关文章:

ios - 具有不同初始 View Controller 的 Storyboard

ios - objectForKey 在 Swift 中为 NSUserDefaults 返回 nil

ios - UICollectionViewFlowLayout minimumInteritemSpacing 不起作用

swift - 停止将触摸事件传播到 Swift 后面的 View

ios - 方形 API + OAuth2 : How do I set my redirect URL to my iOS app?

ios - Swift 2/Xcode 7 beta - 多个位掩码产生错误

ios - UICollectionView 与自定义 UICollectionViewLayout validateLayoutInRect accertion

ios - 如何通过 UICollectionViewController (Swift) 中的 didSelectItemAtIndexPath() 方法访问所有单元格

ios - UITableViewCell 分隔符在 iOS7 中消失

swift - 如何从 NSObject 访问 SwiftUI 环境对象?