我正在尝试为自定义集合视图实现“remembersLastFocusedIndexPath”。苹果文档说:
“如果您将 UICollectionView 子类化,您还可以通过覆盖由 UIFocusEnvironment 协议定义并被所有视图采用的 preferredFocusEnvironments 属性来实现相同的行为。”
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”时,它是一个不同的单元格并且焦点随机跳转。有人知道,哪里可能有问题?我想不明白。