记得LastFocusedIndexPath无法处理UICollectionView

Sno*_*man 7 tvos

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

我已经定了

self.collectionView.remembersLastFocusedIndexPath = YES;
Run Code Online (Sandbox Code Playgroud)

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

所以,如果我这样做

[self.navigationController pushViewController:controller animated:YES];
Run Code Online (Sandbox Code Playgroud)

然后解雇,remembersLastFocusedIndexPath不能正常工作.

但是,如果我:

[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作.

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

小智 7

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

override weak var preferredFocusedView: UIView? {
    return collectionView
}
Run Code Online (Sandbox Code Playgroud)

在此之后记得LastFocusedIndexPath似乎工作.


pro*_*ace 5

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


Ant*_*ine 1

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

\n\n

您还可以实现该UICollectionViewDelegate方法:\nfunc indexPathForPreferredFocusedViewInCollectionView(collectionView: UICollectionView) -> NSIndexPath?

\n\n

文档告诉我们:

\n\n
\n

这个委托方法的功能相当于重写UICollectionView类\xe2\x80\x99s UIFocusEnvironment协议中的preferredFocusedView方法。如果集合视图\xe2\x80\x99s RemembersLastFocusedIndexPath方法设置为YES,则该方法定义集合视图第一次获得焦点时获得焦点的索引路径。

\n
\n\n

但对于你的问题,设置remembersLastFocusedIndexPath为 false 应该可以解决它。

\n