vahidgr
vahidgr

Reputation: 83

Create multiple UIImageViews in UICollectionViewCell

I'm trying to make multiple UIImageViews in a UICollectionViewCell so I wrote this code but nothing appends to lines apparently.

class chartsCell: UICollectionViewCell {

    var lines = [UIImageView]()
    var chartValueCount = Int()

    override func prepareForReuse() {
        super.prepareForReuse()
        lines.removeAll()
        chartValueCount = 0
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        for i in 0 ..< chartValueCount {
            let line = UIImageView(frame: CGRect(x: frame.width * CGFloat(i + 1) / CGFloat(chartValueCount + 1) - (10 * CGFloat(i + 1)), y: 0, width: 20, height: frame.height))
            line.backgroundColor = UIColor.blue
            line.layer.masksToBounds = true
            line.layer.cornerRadius = 10
            lines.append(line)
            contentView.addSubview(lines[i])
        }
    }

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

I change chartValueCount here:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "chartsCell", for: indexPath) as! chartsCell
    cell.chartValueCount = chartValueCount[indexPath.row]
    return cell
}

There are three values in chartValueCount array and as I print cell.lines it prints three []. Nothing shows up in the CollectionView because lines is empty. How do I fill it properly?

Upvotes: 1

Views: 51

Answers (1)

Avtar Singh
Avtar Singh

Reputation: 1064

class chartsCell: UICollectionViewCell {

var lines = [UIImageView]()
var chartValueCount:Int{
    didSet{
        for i in 0 ..< chartValueCount {
            let line = UIImageView(frame: CGRect(x: frame.width * CGFloat(i + 1) / CGFloat(chartValueCount + 1) - (10 * CGFloat(i + 1)), y: 0, width: 20, height: frame.height))
            line.backgroundColor = UIColor.blue
            line.layer.masksToBounds = true
            line.layer.cornerRadius = 10
            lines.append(line)
            contentView.addSubview(lines[i])
        }
    }
}

override func prepareForReuse() {
    super.prepareForReuse()
    lines.removeAll()
    chartValueCount = 0
}

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

}

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

}

Upvotes: 1

Related Questions