我有一个标准水平布局的集合视图。在呈现视图控制器然后解除它时,集合视图重置焦点回到第一个单元格,即使最后一个焦点单元格不是那个。
我已经设置了
self.collectionView.remembersLastFocusedIndexPath = YES;
奇怪的是,只有当我在导航控制器上按下视图控制器时才会发生这种情况。
所以如果我这样做
[self.navigationController pushViewController:controller animated:YES];
然后解雇,remembersLastFocusedIndexPath
无效。
但是,如果我:
[self presentViewController:controller animated:YES completion:nil];
然后按预期工作。
知道为什么它不能通过导航控制器工作?
答案 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