0

我正在尝试为自定义集合视图实现“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”时,它是一个不同的单元格并且焦点随机跳转。有人知道,哪里可能有问题?我想不明白。

4

2 回答 2

0

preferredFocusEnvironments只会让您表明您的 collectionView 作为一个整体是首选的焦点环境,但您不能使用它来首选单个单元格。

为此,您可以实现以下indexPathForPreferredFocusedView方法UICollectionViewDelegate

您可以通过类似的问题和工作示例找到有关此其他问题的更多信息作为响应:indexPathForPreferredFocusedView is not being Called

于 2018-08-29T21:57:59.397 回答
0

最后,我必须将restoresFocusAfterTransition = false设置为视图控制器。它以某种方式与它搏斗。

于 2018-08-31T05:14:35.510 回答