[swift] IGListKit에서 셀의 선택 상태 유지하는 방법

IGListKit은 iOS 애플리케이션을 개발할 때 많은 도움을 주는 강력한 라이브러리입니다. 이번 포스트에서는 IGListKit을 사용하여 셀의 선택 상태를 유지하는 방법에 대해 알아보겠습니다.

1. IGListKit에서 선택 상태 유지하기

IGListKit에서 셀의 선택 상태를 유지하기 위해서는 선택 상태를 관리하는 isSelected 속성을 모델 객체에 추가해야 합니다. 이 모델 객체는 ListDiffable 프로토콜을 구현해야 하며, isEqual(toDiffableObject:)diffIdentifier() 메서드 필수 구현입니다.

class MyModel: NSObject, ListDiffable {
    var isSelected: Bool = false
    var diffIdentifier: NSObjectProtocol {
        return self
    }
    
    func isEqual(toDiffableObject object: ListDiffable?) -> Bool {
        guard let object = object as? MyModel else {
            return false
        }
        return isSelected == object.isSelected
    }
}

선택 상태를 관리해야 하는 셀의 뷰 컨트롤러에서는 IGListAdapterDataSource 프로토콜의 listAdapter(_:configure:) 메서드를 구현하여 선택 상태를 셀에 반영합니다.

extension MyViewController: IGListAdapterDataSource {
    func objects(for listAdapter: IGListAdapter) -> [IGListDiffable] {
        return myDataArray
    }
    
    func listAdapter(_ listAdapter: IGListAdapter, configure cell: UICollectionViewCell, for object: Any, at index: Int) {
        guard let myModel = object as? MyModel, let myCell = cell as? MyCell else {
            return
        }
        
        // 셀의 선택 상태를 모델 객체의 선택 상태와 동기화
        myCell.isSelected = myModel.isSelected
    }
}

셀이 선택되면, 해당 셀의 모델 객체의 isSelected 속성을 변경하여 선택 상태를 유지할 수 있습니다.

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    guard let myModel = myDataArray[indexPath.row] as? MyModel else {
        return
    }
    
    myModel.isSelected = !myModel.isSelected
    listAdapter.performUpdates(animated: true)
}

2. 선택 상태에 따른 셀 스타일 변경하기

셀의 선택 상태에 따라 스타일을 변경할 수 있습니다. 예를 들어, 선택된 셀의 배경색을 변경하고 싶다면, UICollectionViewDelegate 프로토콜의 collectionView(_:didSelectItemAt:) 메서드를 구현하여 배경색을 변경합니다.

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    guard let myCell = collectionView.cellForItem(at: indexPath) as? MyCell else {
        return
    }
    
    myCell.backgroundColor = myCell.isSelected ? .blue : .white
}

이렇게 하면 셀이 선택되었을 때 선택된 셀의 배경색이 파란색으로 변경되는 것을 확인할 수 있습니다.

3. 마무리

이번 포스트에서는 IGListKit을 사용하여 셀의 선택 상태를 유지하는 방법에 대해 알아보았습니다. 모델 객체에 선택 상태를 관리하고, 해당 상태를 셀에 반영하면서 선택 상태를 유지할 수 있습니다. 또한, 선택 상태에 따라 셀의 스타일을 변경할 수도 있습니다. IGListKit을 사용하여 보다 유연하고 사용자 친화적인 애플리케이션을 구현해보세요.

참고 자료