Objective c 基于UIView创建UICollectionViewCell

Objective c 基于UIView创建UICollectionViewCell,objective-c,Objective C,我正在尝试创建一个UICollectionView,其中包含不同的UIView作为其单元格。这是可能的还是我必须让它们成为UICollectionViewCells 您必须返回UICollectionViewCellsUICollectionView不接受UIViews 您可以做的是创建一个通用的UICollectionViewCell,它可以嵌入任何UIView。 原因是集合视图单元具有特定的布局和回收组合 另外,您可以在视图本身的UIView中直接添加child,集合视图单元格有一个cont

我正在尝试创建一个UICollectionView,其中包含不同的UIView作为其单元格。这是可能的还是我必须让它们成为UICollectionViewCells

您必须返回
UICollectionViewCell
s<代码>UICollectionView不接受
UIView
s

您可以做的是创建一个通用的
UICollectionViewCell
,它可以嵌入任何
UIView
。 原因是集合视图单元具有特定的布局和回收组合


另外,您可以在视图本身的
UIView
中直接添加child,集合视图单元格有一个
contentView
,如
UITableViewCell
s.

我没有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 = ""
} 

创建包裹每个唯一单元格的单元格view@Scriptable你有一个很好的例子吗?不是手。。。这很容易做到,我会给你一个基本的例子。这样做通常不是一个好主意,因为你失去了排队系统的可重用性和缓存。通过向通用单元格中添加/删除视图,唯一可以重用的是空单元格。当然,视图本身必须得到正确管理,不要在运行中重新创建视图,所以要创建UICollectionViewCell并在子视图中添加真实内容?这感觉像作弊,但我可能是对的:)几乎是的。。。但通过这种方式,它可以在集合视图中重用,并提供更好的性能。我将尝试以下方法:)