我正在尝试为自定义集合视图实现“ remembersLastFocusedIndexPath”。 苹果文档说:
“如果您将UICollectionView子类化,也可以实现相同的 通过覆盖PreferredFocusEnvironments属性来行为 由UIFocusEnvironment协议定义,并被所有 视图。”
class MyCollectionView: UICollectionView {
open override var preferredFocusEnvironments: [UIFocusEnvironment] {
let sortedVisibleIndexPaths = indexPathsForVisibleItems.sorted(by: {$0 < $1})
if let visibleIndexPath = sortedVisibleIndexPaths[safe: 1] {
if let cell = cellForItem(at: visibleIndexPath) {
return [cell]
}
}
return []
}
open override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
super.didUpdateFocus(in: context, with: coordinator)
LogUtils.logger.error("!")
}
}
preferredFocusEnvironments被调用,但是当我在“ didUpdateFocus”中检查“ context.nextFocusedItem”时,它是一个不同的单元格,并且焦点随机跳跃。 有人知道,哪里可能有问题?我不知道。
答案 0 :(得分:0)
preferredFocusEnvironments
仅允许您表明您的collectionView总体上是首选的焦点环境,但是您不能使用它来首选单个单元格。
为此,您可以实现indexPathForPreferredFocusedView
的方法UICollectionViewDelegate
您可以找到关于此其他问题的更多信息,其中包含类似的问题和一个有效的示例作为回应:indexPathForPreferredFocusedView is not being Called
答案 1 :(得分:0)
最后,我必须将 restoresFocusAfterTransition = false 设置为视图控制器。莫名其妙地击败了。