自定义子类化collectionview-调用了preferredFocusEnvironments,但是视图未聚焦

时间:2018-08-28 19:40:53

标签: tvos focus-engine

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

2 个答案:

答案 0 :(得分:0)

preferredFocusEnvironments仅允许您表明您的collectionView总体上是首选的焦点环境,但是您不能使用它来首选单个单元格。

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

您可以找到关于此其他问题的更多信息,其中包含类似的问题和一个有效的示例作为回应:indexPathForPreferredFocusedView is not being Called

答案 1 :(得分:0)

最后,我必须将 restoresFocusAfterTransition = false 设置为视图控制器。莫名其妙地击败了。