在collectionView中取消隐藏选定单元格的“tick”

时间:2018-04-03 07:11:41

标签: ios swift uicollectionview

我有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()
}

2 个答案:

答案 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