无法将焦点移至tvOS中的下一个UICollectionViewCell

时间:2016-02-01 08:36:42

标签: ios swift2 tvos tvos9.1

我是tvOS app的新手。我在UICollectionViewCell内的UICollectionView内创建了一个自定义按钮。当我加载视图控制器时,我将焦点转移到UICollectionView的第一个单元格,但是按下键盘上的下一个键,焦点就不会移动到下一个单元格。

我的UICollectionView中有六个单元格,它们不需要滚动,这意味着单元格在UICollectionView的宽度内正确拟合。有六个单元格,我无法将焦点移动到下一个单元格。但是如果我再向UICollectionView添加一个单元格,焦点就会正确地移动到下一个单元格。我不确定是怎么回事。有人可以帮我解决这个问题吗?

由于

2 个答案:

答案 0 :(得分:4)

我也有嵌套集合视图。对我来说,问题是内部集合视图没有覆盖-(BOOL)canBecomeFocus并返回NO

帮助我调试此问题的原因是打开视图层次结构,获取视图的地址(通过右键单击打印描述视图),但不会聚焦并调用{{1这很可能会告诉你这个问题。在我的情况下,它读取:

po [<view address> _whyIsThisViewNotFocusable]

答案 1 :(得分:1)

在Swift中

如果你想集中集合视图Cell那么你可以使用collectionview Delegate方法,方法名是

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) 
{
}

您可以像这样使用此方法......

func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {

if let previousIndexPath = context.previouslyFocusedIndexPath,
let cell = collectionView.cellForItemAtIndexPath(previousIndexPath) {
cell.contentView.layer.borderWidth = 0.0
cell.contentView.layer.shadowRadius = 0.0
cell.contentView.layer.shadowOpacity = 0
}

if let indexPath = context.nextFocusedIndexPath,
let cell = collectionView.cellForItemAtIndexPath(indexPath) {
cell.contentView.layer.borderWidth = 8.0
cell.contentView.layer.borderColor = UIColor.blackColor().CGColor
cell.contentView.layer.shadowColor = UIColor.blackColor().CGColor
cell.contentView.layer.shadowRadius = 10.0
cell.contentView.layer.shadowOpacity = 0.9
cell.contentView.layer.shadowOffset = CGSize(width: 0, height: 0)
collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: [.CenteredHorizontally, .CenteredVertically], animated: true)
}
}