Как начать просмотр коллекции Cell с изображением без раскадровки или кончика?

Я собираю 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

0
Діма Комар 28 Май 2017 в 18:21

2 ответа

Лучший ответ

Зарегистрируйте свой класс в 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
Sven 28 Май 2017 в 17:08

Если вы пытаетесь инициализировать свой класс ячейки с определенным изображением, вы можете сделать это, переопределив метод init

override init(frame: CGRect) {
    super.init(frame: frame)
    //set initial image here
}
-1
zfetters 28 Май 2017 в 15:35