我正在尝试拥有一个UICollectionView,它包含不同的UIViews作为其单元格。这可能吗,还是我必须使它们成为UICollectionViewCells?
答案 0 :(得分:1)
我没有Objective-C的示例,但是您应该能够从下面的代码示例中获得概念。
如何创建一个包装UIView并更可重用的单元格的示例
class ProfileView: UIView {
var imageView: UIImageView!
var name: UILabel!
}
class ProfileCollectionViewCell: UICollectionViewCell {
let profileView = ProfileView()
init() {
super.init()
configureConstraints()
}
func configureConstraints() {
// use a handy extension you've already built
contentView.addSubView(profileView)
profileView.pinToEdges(of: contentView)
}
}
func collectionView(_ collectionView: UICollectionView,
cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let row = self.objects[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "someId" for: indexPath) as? ProfileCollectionViewCell
cell?.profileView.imageView.image = row["image"]
cell?.profileView.name.text = row["name"]
return cell
}
注意:您可能需要管理“重置单元格状态”,然后才能将其重新使用,例如:
override prepareForReuse() {
super.prepareForReuse()
profileView.imageView.image = nil
profileView.name.text = ""
}
答案 1 :(得分:0)
您必须返回UICollectionViewCell
。 UICollectionView
不接受UIView
。
您可以做的是创建可以嵌入任何UICollectionViewCell
的通用UIView
。
原因是因为收集视图单元格具有特定的布局和回收组成。
此外,您可以直接在视图本身上的UIView
中添加子元素,集合视图单元格具有contentView
,例如UITableViewCell
。