如何使用没有Storyboard或nib的图像初始化collectionViewCell?

时间:2017-05-28 15:21:08

标签: ios swift uicollectionview

如何使用没有Storyboard或nib的图像初始化集合视图?

我正在构建ImagePicker并希望在没有故事板的情况下进行构建

所以带有故事板的工作代码就是这样,但是如何以编程方式进行呢?

class PhotosCollectionViewCell: UICollectionViewCell {
    @IBOutlet weak var imageView: UIImageView!

    var image: UIImage? {
        get { return imageView.image }
        set { imageView.image = newValue }
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        self.imageView.image = nil
    }

}

我没有IBOutlet改变了代码:

class PhotosCollectionViewCell: UICollectionViewCell {
    var imageView: UIImageView!
    public var asset: PHAsset!
    public var cellTappedAction: ((PHAsset) -> ()) = { _ in }

    var image: UIImage? {
        get { return imageView.image }
        set { imageView.image = newValue }
    }

    override init(frame: CGRect) {
      self.imageView = UIImageView()
      super.init(frame: frame)
        self.imageView.image = self.image
        self.imageView.frame = self.frame
        self.addSubview(self.imageView)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
//        fatalError("init(coder:) has not been implemented")
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        self.imageView.image = nil
    }
}

控制器:

self.collectionView?.register(PhotosCollectionViewCell.self, forCellWithReuseIdentifier: "Cell")

所以没有IBOutlet的第一张图片和带有它的第二张图片

Non storyboard cell storyboard cell

2 个答案:

答案 0 :(得分:0)

viewDidLoad()

中注册您的课程
collectionView.register(PhotosCollectionViewCell.self, forCellReuseIdentifier: "photosCell")

cellForItem中将您的单元格取消并配置单元格的子视图

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photosCell", for: indexPath)
// configure cell subviews

请记住在PhotosCollectionViewCell中初始化您的子视图,因为您不会使用IBOulets

override init(frame: CGRect) {
    super.init(frame: frame)
    imageView.frame = contentView.bounds
    self.contentView.addSubview(imageView)
}

答案 1 :(得分:-1)

如果您尝试使用某个图像初始化您的单元格类,您应该可以通过覆盖init方法来实现此目的

override init(frame: CGRect) {
    super.init(frame: frame)
    //set initial image here
}