簡體   English   中英

更改collectionView單元格中項目的顏色和文本

[英]Change Color and text of items in cell in collectionView

我想使用功能更改circleView的顏色和CollectionView的單元格標簽中的文本。

我的單元格類別:

class CustomCell: UICollectionViewCell {

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

var timerLabel:UILabel = {
        let label = UILabel()
        label.text = "5"
        label.frame = CGRect(x: 200, y: 10, width: 60, height: 60)
        label.backgroundColor = .white
        label.textAlignment =  NSTextAlignment.center

        return label
    }()

var circleView: UIView = {
        let circleView = UIView()
        circleView.frame = CGRect(x: 100, y: 10, width: 60, height: 60)
        circleView.backgroundColor = .red
        circleView.layer.cornerRadius = 30
        circleView.layer.masksToBounds = true

        return circleView
    }()

func setupViews() {
        backgroundColor = .white
        addSubview(timerLabel)
        addSubview(circleView)
    }

required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setupViews()
    }
}

在VC中創建CollectionView:

func collectionViewSet() {
        collectionView?.frame.size.height = (view.frame.height / 100) * 70
        collectionView?.backgroundColor = .white
        collectionView?.register(CustomCell.self, forCellWithReuseIdentifier: cellId)
    }

//-------------- (CollectionView Configure) -------------------

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

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

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId , for: indexPath)
        customCell.tag = indexPath.row + 1

        return cell
}

在我創建的函數中,例如setColor(),我想為CircleView生成ranodm顏色(通過UIColor),並為TimerLable生成隨機數,但只能在一個單元格中。 對於下一個單元格,我想生成另一個顏色和數字。 有什么辦法做到這一點,我試圖使用indexPath.row和func didselectedItemForindexPath,但它根本不起作用。 也許我做錯了。

好的,我找到了答案。 如果有人遇到類似問題,我會發布我的代碼:)

 for x in 0...4{
        let indexPath = IndexPath(row: x, section: 0)
        guard let cell = collectionView?.cellForItem(at: indexPath) as? CustomCell else {
            return
        }

        cell.circleView.backgroundColor = .blue
        }

這里有許多生成隨機顏色和數字的示例-快速搜索,您將有很多選擇。

選擇一對夫婦后,將cellForItemAt函數更改為:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId , for: indexPath)
        customCell.tag = indexPath.row + 1

        let randColor = myRandomColorFunc()
        let randNumber = myRandomNumberFunc()

        customCell.circleView.backgroundColor = randColor
        customCell.timerLabel.text = "\(randNumber)"

        return cell
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM