Как программно добавить UILabel и UIImageView в CollectionView? - PullRequest
0 голосов
/ 20 сентября 2018

Я создал представление коллекции программным способом и не могу понять, как добавить метки и фоновое изображение в ячейки.Вот код, который у меня есть для представления коллекции.

import UIKit

class ViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    let cell = "cellId"
    let text = UILabel()

    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.title = "Vote"
        collectionView?.backgroundColor = UIColor.white
        collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cell)

    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.cell, for: indexPath)
        cell.backgroundColor = UIColor.lightGray
        return cell
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: view.frame.width, height: 200)
    }
}

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Создать подкласс ячейки представления коллекции и вместо UICollectionViewCell используйте CustomCollectionViewCell

class CustomCollectionViewCell: UICollectionViewCell {
var imageView: UIImageView?
var label: UILabel? 



override init(frame: CGRect) {
    super.init(frame: frame)

    imageView = UIImageView(frame: self.bounds)
    //customise imageview
    imageView?.backgroundColor = UIColor.red
    contentView.addSubview(imageView!)
    label = UILabel(frame: CGRect(x: 20, y: 20, width: self.bounds.width - 20, height: 20))
    //Customsize label
    label?.text = "Hello"
    label?.textColor = UIColor.white
    contentView.addSubview(label!)
}

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

override var bounds: CGRect {
    didSet {
        contentView.frame = bounds
    }
}
}

В контроллере представления обновлен следующий код:

override func viewDidLoad() {
        super.viewDidLoad()

    navigationItem.title = "Vote"
    collectionView?.backgroundColor = UIColor.white
    collectionView?.register(CustomCollectionViewCell.self, forCellWithReuseIdentifier: cell)

}

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.cell, for: indexPath) as! CustomCollectionViewCell
        cell.backgroundColor = UIColor.lightGray
        return cell
    }
0 голосов
/ 20 сентября 2018

Простой пользовательский класс UICollectionViewCell будет выглядеть следующим образом:

class MyCell : UICollectionViewCell {
    var label1: UILabel
    var label2: UILabel
    var bgImg:  UIImageView
}

Редактировать функцию viewDidLoad:

collectionView?.register(MyCell.self, forCellWithReuseIdentifier: cell)

Редактировать функцию cellForItemAt:

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.cell, 
                                                              for: indexPath) as! MyCell

cell.bgImg.image = UIImage(named: "img.png")
cell.label1.text = "..."
cell.label2.text = "..."

return cell

Используйте функцию init в классе MyCell для размещения меток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...