我是tvOS app的新手。我在UICollectionViewCell
内的UICollectionView
内创建了一个自定义按钮。当我加载视图控制器时,我将焦点转移到UICollectionView的第一个单元格,但是按下键盘上的下一个键,焦点就不会移动到下一个单元格。
我的UICollectionView中有六个单元格,它们不需要滚动,这意味着单元格在UICollectionView的宽度内正确拟合。有六个单元格,我无法将焦点移动到下一个单元格。但是如果我再向UICollectionView添加一个单元格,焦点就会正确地移动到下一个单元格。我不确定是怎么回事。有人可以帮我解决这个问题吗?
由于
答案 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)
}
}