以下代码作用是一个collection view的cell上的控件的设置,初始化后,第一个cell上的控件为橙色,其他为灰色,点击其他cell,选中则为橙色,其他为灰色。
但是这时候出问题了,因为初始化后,第一个橙色的cell实际上并不是因为选中才为橙色的,其默认仍为未选中状态,所以此时点击其他cell,第一个cell的状态实质上并没有改变,故而第一个cell并不能变为灰色(即它不会走select属性)
override func awakeFromNib() {
if newsTypeCellStartindex == 0{
self.newsType.textColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)
self.selectLine.backgroundColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)
} else {
self.newsType.textColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)
self.selectLine.backgroundColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)
}
newsTypeCellStartindex += 1
}
override var selected: Bool{
didSet{
if selected {
self.newsType.textColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)
self.selectLine.backgroundColor = UIColor(red: 253/255.0, green: 107/255.0, blue: 9/255.0, alpha: 1)
} else {
self.newsType.textColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)
self.selectLine.backgroundColor = UIColor(red: 182/255.0, green: 182/255.0, blue: 182/255.0, alpha: 1)
}
}
}
解决方法:
在collection的代理方法里
func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
for cell in collectionView.visibleCells() {
cell.selected = false
}
let cell = collectionView.cellForItemAtIndexPath(indexPath)
cell!.selected = true
}
作用是,因为cell复用,所以遍历可见cell,即等于遍历了所有的cell,把cell的选中状态置成false,使所有cell强制走select属性,使其改变颜色,然后最后再去把当前选中的cell的select属性改成true,这样就可以达到只有选中的那个是橙色了