我有collectionView
个图片,我想在选择多个这些单元格时显示。
我使用简单的cell.myUIImage.isHidden = false
但似乎没有任何效果。
在界面生成器中启用了多项选择,并在viewDidLoad()
中设置,这就是我所拥有的:
@IBOutlet weak var myUIImage: UIImageView!
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoItemView", for: indexPath) as! PhotoFeed
cell.myUIImage.isHidden = false
print ("cell was selected at:", indexPath.item)
photoCollection.reloadData()
}
答案 0 :(得分:1)
除了
UICollectionViewCell
方法之外,您无法使用dequeueReusableCell
访问cellForItemAt indexPath
。
要访问didSelectItemAt indexPath
中的单元格,请使用:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if let collectionCell = collectionView.cellForItem(at: indexPath) as? PhotoFeed {
collectionCell.myUIImage.isHidden = false
print ("cell was selected at:", indexPath.item)
photoCollection.reloadData()
}
}
但是
photoCollection.reloadData()
将重新加载单元格,myUIImage
将再次隐藏。因此,您需要维护所选索引并在
cellForItemAt indexPath
中显示/隐藏。在selectedIndexes
的帮助下,您可以选择显示图像和隐藏图像等功能。
您应该有一个selectedIndexes
数组。说强>
var selectedIndexes = [IndexPath]()
添加didSelectItemAt indexPath
,更新方法为:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
if selectedIndexes.contains(indexPath) {
if let index = selectedIndexes.index(of: indexPath) {
selectedIndexes.remove(at: index)
}
} else {
selectedIndexes.append(indexPath)
}
photoCollection.reloadData()
}
cellForItemAt indexPath
:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {\
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "photoItemView", for: indexPath) as? PhotoFeed else {
fatalError("cell not found")
}
if selectedIndexes.contains(indexPath) {
cell.myUIImage.isHidden = false
} else {
cell.myUIImage.isHidden = true
}
return cell
}
答案 1 :(得分:1)
你应该在collectionviewcell中为myUIImage创建@IBOutlet:
CoreModule
在ViewController中:
CoreModule