代码之家  ›  专栏  ›  技术社区  ›  headache

uiCollectionViewCell未在选择后更新视图

  •  0
  • headache  · 技术社区  · 5 年前

    出现以下问题:

    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
    

    当项为 挑选出来的 ,但我无法更改此方法的任何单元格属性。

    我创建了一个新的项目,其中包含一个已删除的uiCollectionViewController,以在选中时更改单元格的背景色。它也不起作用。这里是:

    import UIKit
    
    private let reuseIdentifier = "Cell"
    
    class CollectionViewController: UICollectionViewController {
    
    override func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }
    
    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 5
    }
    
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath)
    
        cell.backgroundColor = UIColor.blue
    
        return cell
    }
    
    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        let cell = self.collectionView(self.collectionView, cellForItemAt: indexPath)
        cell.backgroundColor = UIColor.green
    }
    

    }

    我在情节提要中所做的唯一一件事是删除标准视图控制器并将其替换为uiCollectionViewController,创建uiCollectionViewController的子类,并将情节提要中的控制器设置为该类。

    另外,当从 didSelectItemAt 方法:

    self.collectionView.indexPathsForSelectedItems
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   vadian    5 年前

    您使用的API不正确。 从未 调用委托方法 collectionView(_ cellForItemAt: 使用 cellForItem(at:

    if let cell = collectionView.cellForItem(at: indexPath) {
       cell.backgroundColor = UIColor.green
    }
    

    但要注意,这种变化并不是持久的。当用户滚动时,颜色将变回蓝色。

        2
  •  0
  •   Nischal Hada    5 年前

    你可以做到如下:

    可视控制器

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ColoursViewCell", for: indexPath) as! ColoursViewCell
        return cell
    }
    

    ui集合视图单元格

    class ColoursViewCell: UICollectionViewCell {
        @IBOutlet var photoImageView: UIImageView?
    
        override var bounds: CGRect {
            didSet {
                self.layoutIfNeeded()
            }
        }
    
        override var isSelected: Bool{
            didSet{
                if self.isSelected{
                    self.photoImageView?.backgroundColor = UIColor.random
                }else{
                    self.photoImageView?.backgroundColor = UIColor.lightGray
                }
            }
        }
    }
    

    你可以从我在Github的这个链接中获得示例项目 https://github.com/hadanischal/RandomColors/tree/develop