我正在尝试在 SpriteKit 游戏中使用 UIcollectionView 来显示关卡选择场景。收藏 View 有 6 个部分(开始、世界 1-5),每个部分有 8 个单元格(级别 1-8)。目前它们是带有简单 UILabel 的自定义单元格。 我可以使用索引路径的 did 选择项来加载我的关卡,这一切都很好。但是我的问题如下
Collection View 中的第一部分是开始屏幕,因此我不希望 Collection View 显示该部分中的 8 个单元格。该部分应该仅显示背景图像和点击启动标签。所以我在 cellForIndexPath 中尝试的是
1) 隐藏该部分中的单元格,但这会导致其他部分中的单元格出现文本标签问题
2)隐藏文本标签并使单元格颜色透明,与1相同问题
那么基本上我可以做什么来解决这个问题呢?
我可以将开始部分放入不同的 SKScene 中,但我更喜欢将其全部放在 Collection View 中。 我想到的另一个选择是让每个部分只有 1 个单元格(屏幕大小),并向除开始部分之外的每个部分添加 8 个 UIButton。 我还需要禁用其中一些单元格/按钮,直到解锁上一个级别。我不确定更好的方法是什么,8 个单元格作为按钮还是 1 个单元格中 8 个 UIButton。
我只是在寻找 UICollectionView 解决方案,我已经有了替代方案,因为在转换为 tvOS 并使用焦点内容并通过 30 多个按钮的 6 个部分进行导航时,它会让我的生活变得更加轻松
非常感谢您的帮助
最佳答案
您可以在 UICollectionView 中注册不止一种单元格:
- 如果您使用界面构建器,请从对象库添加另一个 Collection View 单元并设置其重用标识符
- 否则,使用
self.collectionView?.registerNib(forCellWithReuseIdentifier:)
或self.collectionView?.registerClass( 在 UICollectionViewController 的
viewDidLoad
方法中注册 nib 或类forCellWithReuseIdentifier:)
然后,当您使单元出队时,使用正确的重用标识符:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
var reuseIdentifier = "identifier of cell with 8 button"
if indexPath.section == 0 {
reuseIdentifier = "identifier of start cell as you set in IB of viewDidLoad"
}
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)
// Configure the cell depending on indexPath
return cell
}
关于ios - Swift UI Collection View 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33983338/