我有一个UICollectionView
和一个自定义单元格。自定义单元格包含一个UIImageView
和一个UILabel
。
UIImageView
的背景颜色,当我点击相应的单元格时(在didSelectItemAt indexPath
方法中我想要访问自定义单元格属性)。有没有办法实现这个目标?或者我应该采取其他方式吗?UICollectionView
中的任何项目时,我得到的另一个问题是,正在进行多项选择。意味着可重复使用的细胞也被选中。有人能帮助我吗?
答案 0 :(得分:0)
第一个问题
请参阅this链接,因为它包含有关如何访问单元格及其属性的说明。 (适用于UITableView
,但UICollectionView
)
第二个问题
您必须在didSelectRow
和cellForRowAtIndexPath
更新模型,您必须根据该模型设置单元格的颜色。
第二点的另一个解决方案是将选定的indexPath
存储在一个
数组并在cellForRowAtIndexPath
检查是否indexPath
存在于该数组中并适当设置其颜色。例如:
var array = [Int]()
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
//update model or
array.append(indexPath.item)
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
//check model or
if(array.contains(indexPath.item)){
}else{
}
}
答案 1 :(得分:0)
试试这个:
<强> 1。自定义UICollectionViewCell
类:
import UIKit
class CustomCollectionViewCell: UICollectionViewCell
{
//MARK: Outlets
@IBOutlet weak var testImageView: UIImageView!
@IBOutlet weak var testLabel: UILabel!
//MARK: Lifecycle Methods
override func awakeFromNib()
{
self.testImageView.image = nil
self.testLabel.text = nil
}
override var isSelected: Bool{
willSet{
super.isSelected = newValue
if newValue
{
self.backgroundColor = UIColor.lightGray
}
else
{
self.backgroundColor = UIColor.groupTableViewBackground
}
}
}
}
<强> 2。将UICollectionViewDelegate
方法实施为:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
{
collectionView.selectItem(at: indexPath, animated: true, scrollPosition: .centeredVertically)
}
您可以根据需要更改单元格选择和默认颜色。