基于UIView创建UICollectiionViewCell

时间:2018-11-08 13:29:58

标签: objective-c

我正在尝试拥有一个UICollectionView,它包含不同的UIViews作为其单元格。这可能吗,还是我必须使它们成为UICollectionViewCells?

2 个答案:

答案 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)

您必须返回UICollectionViewCellUICollectionView不接受UIView

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

此外,您可以直接在视图本身上的UIView中添加子元素,集合视图单元格具有contentView,例如UITableViewCell