tvOS UICollectionView获取当前焦点项的索引路径

xin*_*nil 8 uicollectionview tvos

所以这是一个无聊的问题,但我无法找出一种非常简单的方法来检测当前关注的项目indexPath.
我环顾四周,希望看到一些非常容易的东西,collectionView.indexPathOfCurrentlyFocusedItem但没有找到任何远近的东西.所以我四处寻找UIFocusEnvironment,UIFocusUpdateContext试图找到类似的东西,试图找到所需的属性,但失败了.因此,我能想到的唯一解决方案是遍历所有可见单元格并找到焦点属性设置为true的单元格.

那么有没有更简单,更优雅的方式来找到当前关注的项目indexPath(除非通过委托方法跟踪它并将其保存在视图控制器的属性中)

Ant*_*ine 19

您可以使用以下UIScreen属性focusedView:

if let focusedCell = UIScreen.main.focusedView as? UICollectionViewCell {
    if let indexPath = collectionView.indexPath(for: focusedCell) {
        print("IndexPath is \(indexPath)")
    }
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*ker 9

使用didUpdateFocusInContect - UICollectionViewDelegate

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    if collectionView == self.collectionView {
        print(context.nextFocusedIndexPath)
    }
}
Run Code Online (Sandbox Code Playgroud)

这将返回将要聚焦的单元格的indexPath,您也可以尝试:

context.previouslyFocusedIndexPath
Run Code Online (Sandbox Code Playgroud)

取决于你想要做什么.