在tvOS中重新加载数据后,集合视图的最后一个聚焦索引路径丢失了

时间:2016-01-29 11:08:18

标签: ios uicollectionview uikit tvos

在我的tvOS应用中,我有一个集合视图,我将其> df <- data.frame(x1=runif(20,1,200),x2=runif(20,1,18),x3=runif(20,1,7), + x4=runif(20,1,3),x5=runif(20,1,25),x6=runif(20,1,220), + x7=runif(20,1,10),x8=runif(20,1,8),x9=runif(20,1,20), + x10=runif(20,1,32)) > df x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 1 144.616823 5.066181 6.577798 1.941608 19.250274 79.88517 3.487795 5.397938 19.226113 9.469675 2 143.563809 1.608130 6.446411 2.071802 12.636476 193.12108 5.685940 1.643825 11.111157 5.676330 3 124.396884 3.693522 3.660122 1.346020 21.605446 98.05443 1.965067 5.332797 7.879099 2.252806 4 75.936173 9.596695 1.130494 2.014904 19.460231 195.26396 1.132060 6.338672 4.077532 31.391598 5 8.913065 1.170144 3.197571 1.011599 3.970510 211.02147 6.483770 5.654871 12.669959 16.107771 6 177.159043 11.625298 6.282233 1.576242 13.997114 119.77652 9.507075 4.430359 13.564249 1.256496 7 70.383858 14.545778 2.018208 2.990232 3.391777 83.47019 2.232830 7.433207 1.809452 18.440641 8 48.883343 8.747942 4.473287 1.163179 13.949834 77.34972 3.959059 1.320038 10.385028 2.291721 9 85.618694 5.421825 4.675017 1.935956 10.877031 185.46998 7.548788 4.160425 16.304787 23.373557 10 152.615778 12.088414 2.154604 2.266516 20.823971 159.11784 7.047805 3.570086 18.286411 22.731629 11 83.139696 1.909547 3.124565 2.580109 4.726824 100.42819 1.994356 2.910579 2.034623 26.973796 12 85.488980 4.193826 2.051200 1.063903 18.012469 210.97311 5.783519 5.846847 9.931950 17.261856 13 172.446057 14.226508 3.080864 2.153755 6.844384 201.36755 1.593935 4.389736 10.549154 12.728925 14 23.892525 13.907691 2.494084 1.658334 11.922202 159.96523 1.605302 4.113502 7.151511 11.186883 15 24.836826 16.390015 2.989483 2.327674 17.067639 44.66071 5.275591 2.970786 6.068440 1.898431 16 84.552408 6.670091 3.059626 1.693665 6.243420 175.88141 9.638818 2.090328 17.085817 23.759445 17 29.615649 12.239127 5.728309 1.034658 3.793404 17.34458 2.211930 7.648141 13.080505 21.024933 18 106.492512 13.543715 3.244059 2.167515 21.803114 204.25419 7.807202 1.519835 1.117334 9.732187 19 156.503788 16.186274 4.825950 2.019083 6.594384 61.66293 9.693650 5.181686 10.884431 23.105221 20 196.592843 6.461601 4.183722 1.742368 21.129107 175.12238 9.239206 6.657412 8.371315 15.648119 > ind <- c(0.800, 1.000, 0.400, 0.010, 6.000, 0.100, 0.180, 0.006, 10.000, 1.000) > ind [1] 0.800 1.000 0.400 0.010 6.000 0.100 0.180 0.006 10.000 1.000 > sapply(df[,ind>=0.8], function(x){max(x)}) x1 x2 x5 x9 x10 196.59284 16.39002 21.80311 19.22611 31.39160 设置为remembersLastFocusedIndexPath。由于这还不足以实现此行为,我还在我的true中覆盖了一个方法,如下所示:

UIViewController

这很好用,直到我开始重新加载集合视图出于某些原因。如果作为集合视图可见,我会调用override weak var preferredFocusedView: UIView? { return collectionView }

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

作为一种解决方法,我正在管理这种非理想情况:

  1. 由于来自我后端的新数据触发了重新加载,我只在集合视图可见时调用collectionView.reloadData()(因为我知道最后一个聚焦索引在此处没有变化)。
  2. 我在collectionView.reloadData()中致电collectionView.reloadData(),以便在用户回来时提供最新内容。
  3. 我该如何正确地做到这一点?提前谢谢。

2 个答案:

答案 0 :(得分:2)

最近我也遇到了这个问题,我的情况对你来说几乎是一样的。

我还在collectionView.reloadData()viewDidLoad

中致电viewWillAppear

然后

我改变了

collectionView.reloadData()

collectionView.reloadItemsAtIndexPaths(collectionView.indexPathsForVisibleItems())

它大部分时间都适合我,仍然有大约<5%的机会搞乱最后一个焦点指数

答案 1 :(得分:1)

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