2017-10-19 13 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 
     } 
    } 
} 

내 코드에서 isSelected이 true로 설정되면 이미지 뷰의 레이어 테두리 너비를 2.5로 변경합니다.속성 관찰자가있는 컬렉션 뷰 셀을 변경하는 것이 좋지 않습니까?

하나의 셀을 선택하고 컬렉션보기를 스크롤하면 해당 셀을 재사용 할 때 셀이 선택된 상태로 유지되지만 재사용 셀은 선택되지 않은 상태로 변경됩니다. 둘째, 내가 선택한 셀로 돌아가서 선택되지 않은 셀을 재사용했을 때, 나는 그것이 선택되지 않은 상태에 있다고 생각했다. 그러나 셀은 자동으로 선택됩니다.

복용량 복용량보기가 자동으로이를 관리합니까?

답변

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