如何在UICollectionView中更改特定单元格的颜色

时间:2016-03-02 23:25:09

标签: swift uicollectionview

代码非常简单,但我不知道它为什么不起作用。我要做的是将第5个cel的颜色或第二列和第二行的颜色改为黑色,而不是白色。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var x: UICollectionView!

    var place = NSIndexPath(forItem: 1, inSection: 1)

    @IBAction func y(sender: AnyObject) {

        x.cellForItemAtIndexPath(place)?.backgroundColor = UIColor.blackColor()

    }

    @IBAction func z(sender: AnyObject) {

        x.cellForItemAtIndexPath(place)?.backgroundColor = UIColor.whiteColor()

    }

}

1 个答案:

答案 0 :(得分:1)

如果要更改单元格的背景,则需要更改其必须管理的contentView,例如:

cell.contentView.backgroundColor = UIColor.whiteColor()

因此,在您的情况下,您可以用以下内容替换您的功能:

@IBAction func y(sender: AnyObject) {

    self.x.cellForItemAtIndexPath(place)?.contentView.backgroundColor = UIColor.blackColor()

}

@IBAction func z(sender: AnyObject) {

    self.x.cellForItemAtIndexPath(place)?.contentView.backgroundColor = UIColor.whiteColor()

}

此外,如果要更改第五个单元格背景颜色,则indexPath应为:

var place = NSIndexPath(forItem: 4, inSection: 0)

我注意到你正在尝试第1行和第1列,因此它的forItem:1和inSection:1,它不像IOS那样工作。 UICollectionView有项目和部分,collectionView中的项目从左边开始写入item0 item1 item2 ..等默认情况下它在第0部分,例如你添加另一个部分,它将是第1部分,在其中放入另一个项目,这将是item0,item2,item3 ..等等,但是它在第1部分等等,有关它的更多信息:Apple Documentation

确保将数据源设置为ViewController:

class ViewController: UIViewController,UICollectionViewDataSource {

        override func viewDidLoad() {
        super.viewDidLoad()

        x.dataSource = self

    }


     func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {

        return 1
    }


     func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        return 20
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath)

    // Configure the cell


    return cell
  }
}

它应该完美,祝你好运!