记得LastFocusedIndexPath无法处理UICollectionView

时间:2015-09-26 00:00:27

标签: tvos

我有一个标准水平布局的集合视图。在呈现视图控制器然后解除它时,集合视图重置焦点回到第一个单元格,即使最后一个焦点单元格不是那个。

我已经设置了

self.collectionView.remembersLastFocusedIndexPath = YES;

奇怪的是,只有当我在导航控制器上按下视图控制器时才会发生这种情况。

所以如果我这样做

[self.navigationController pushViewController:controller animated:YES];

然后解雇,remembersLastFocusedIndexPath无效。

但是,如果我:

[self presentViewController:controller animated:YES completion:nil];

然后按预期工作。

知道为什么它不能通过导航控制器工作?

4 个答案:

答案 0 :(得分:7)

对我有用的是确保viewController上的preferredFocusView是集合视图:

override weak var preferredFocusedView: UIView? {
    return collectionView
}

此后记得LastFocusedIndexPath似乎有效。

答案 1 :(得分:3)

确保在collectionView或TableView的viewWillAppear上没有reloadData()。否则rememberedFocus将被重置为默认值(对于我的情况下的集合视图,它是中心可见单元格)

答案 2 :(得分:1)

默认情况下,系统会记住位置。您应该通过将remembersLastFocusedIndexPath设置为false来解决此问题。

您还可以实施UICollectionViewDelegate方法: func indexPathForPreferredFocusedViewInCollectionView(collectionView: UICollectionView) -> NSIndexPath?

文档告诉我们:

  

此委托方法的功能相当于覆盖UIFocusEnvironment协议中的UICollectionView类的preferredFocusedView方法。如果集合视图的remembersLastFocusedIndexPath方法设置为YES,则此方法定义在第一次聚焦集合视图时聚焦的索引路径。

但是对于您的问题,将remembersLastFocusedIndexPath设置为false应修复它。

答案 3 :(得分:0)

您也可以尝试实现类似的行为。只记得

中的最后一个聚焦细胞
func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator)

并在

中使用此信息
func collectionView(collectionView: UICollectionView, canFocusItemAtIndexPath indexPath: NSIndexPath) -> Bool