使UICollectionView的第一个单元格专注于tvOS

Spa*_*Dog 6 uicollectionview uicollectionviewcell tvos

好的,如果我有一个,UIViewController我可以使用这个`preferredFocusedView来关注tvOS,但是如何使UICollectionView的第一个单元格聚焦?我怎么做?

我试图创建一个UICollectionViewCell子类并拥有该方法

- (UIView *)preferredFocusedView {
   return ([self ifThisIsTheFirstCell]) ? self : nil;
}
Run Code Online (Sandbox Code Playgroud)

没有成功.

有没有办法做到这一点?

Jus*_*oss 9

"首选焦点"在概念上起作用的方式是,在应用程序窗口开始有一个"链"对象,通过视图控制器和视图向下,直到链在可聚焦视图结束.最后的视图是在您的应用程序启动时会集中注意力,或者如果需要重置焦点(例如,如果从视图层次结构中删除当前关注的视图,则UIKit将需要选择另一个视图以成为焦点) .该preferredFocusedView方法是如何定义的链.

例如,UIWindowimplements preferredFocusedView返回首选的焦点视图rootViewController.在摘要中,t做的是这样的:

- (UIView *)preferredFocusedView {
    return [self.rootViewController preferredFocusedView];
}
Run Code Online (Sandbox Code Playgroud)

UIViewController实现preferredFocusedView返回它的view属性.UIView只是回归自己.

但是,UICollectionView实现方式preferredFocusedView不同:在最简单的情况下,它返回第一个单元格.所以你想要的部分已经为你完成了.如果焦点没有移动到集合中的第一个单元格,那么"链"中更高的位置就是问题所在.

如果视图控制器的集合视图不是视图控制器的view属性,那么您需要自己引导焦点链到集合:

// in your view controller:
- (UIView *)preferredFocusedView {
    return myCollectionView;
}
Run Code Online (Sandbox Code Playgroud)

从那里,集合视图将引导链到特定单元格.

  • 现在我们正在谈论.我想知道为什么Apple从不雇用像你这样的人来写他们的文档.相反,他们写的是讨厌写作的人.完善!谢谢! (3认同)