2017-10-19 73 views
0
class SceneCell: UICollectionViewCell { 

    override var isSelected: Bool { 
     didSet { 
      setSelected(bool: isSelected) 
     } 
    } 

    override var isHighlighted: Bool { 
     didSet { 
      setHighlighted(bool: isHighlighted) 
     } 
    } 

    @IBOutlet weak var thumbnailImageView: UIImageView! 

    override func draw(_ rect: CGRect) { 
     super.draw(rect) 

     self.backgroundColor = .clear 
     self.thumbnailImageView.layer.borderColor = UIColor.green.cgColor 
     self.thumbnailImageView.layer.masksToBounds = true 
     self.thumbnailImageView.clipsToBounds = true 
     self.thumbnailImageView.layer.cornerRadius = 8 
    } 

    func update(with scene: Scene) { 

    } 

    private func setHighlighted(bool: Bool) { 
     if bool { 
      self.alpha = 0.5 
     } else { 
      self.alpha = 1.0 
     } 
    } 

    private func setSelected(bool: Bool) { 
     if bool { 
      self.thumbnailImageView.layer.borderWidth = 2.5 
     } else { 
      self.thumbnailImageView.layer.borderWidth = 0 
     } 
    } 
} 

在我的代码中,当被选中时,我将图像视图的图层边框宽度更改为2.5设置为true。使用属性观察器更改集合视图单元格很不好吗?

当我选择一个单元格并滚动集合视图时,我认为当重用该选定单元格时单元格保持选中状态,但重用单元格更改为未选中状态。其次,当我回到选定的单元格并重新使用未选中的单元格时,我认为它处于未选定状态。但是单元格是自动设置的。

剂量收集视图自动管理这些?

回答

0

该问题的代码工作完美。这是一个替代解决方案,用于记录单元格的选择并应用于选定/取消选择状态的设置。

class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource { 
    //...... 

    var selectedIndexPaths = [IndexPath]() 

    public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     selectedIndexPaths.append(indexPath) 
    } 

    public func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
     if let index = selectedIndexPaths.index(of: indexPath) { 
      selectedIndexPaths.remove(at: index) 
     } 
    } 

    public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     //... 
     cell.setSelected(selectedIndexPaths.contains(indexPath)) //Remember to make the cell's setSelected() public. 
     //... 
    } 

    //...... 
} 
+0

但我的代码完美地工作。 – Sohn

+0

与重复使用问题完美结合使用?我想它在没有滚动的情况下工作完美,是吗? –

+0

它没有重用问题。我的问题是为什么这个代码运行良好。 – Sohn

相关问题