代码非常简单,但我不知道它为什么不起作用。我要做的是将第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()
}
}
答案 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
}
}
它应该完美,祝你好运!