[swift] Swift IGListKit을 사용한 컬렉션 뷰 셀 선택상태 관리하기

IGListKit은 iOS 애플리케이션에서 대규모 데이터를 효율적으로 관리하기 위한 강력한 라이브러리입니다. 이 라이브러리를 사용하면 컬렉션 뷰와 테이블 뷰를 쉽게 구성할 수 있으며, 선택 상태를 관리하는 것도 간단합니다.

IGListKit 선택상태 관리 방법

IGListKit에서 선택 상태를 관리하는 가장 일반적인 방법은 UICollectionViewDelegatedidSelectItemAt 메서드를 사용하는 것입니다. 이 메서드는 사용자가 셀을 선택하면 호출되며, 선택한 셀의 정보를 전달해줍니다.

다음은 IGListKit에서 선택 상태를 관리하는 예제 코드입니다.

import IGListKit

class MySelectionHandler: NSObject, UICollectionViewDelegate {
    var selectedItems = Set<Int>()

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let object = self.collection?.object(atSection: indexPath.section) else { return }
        guard let item = object as? MyDataModel else { return }

        if selectedItems.contains(item.id) {
            selectedItems.remove(item.id)
        } else {
            selectedItems.insert(item.id)
        }

        collectionView.reloadItems(at: [indexPath])
    }
}

위의 코드에서는 MySelectionHandler 클래스가 UICollectionViewDelegate를 구현한 것을 볼 수 있습니다. selectedItems는 선택된 항목을 저장하기 위한 Set입니다.

didSelectItemAt 메서드에서는 선택한 셀이 이미 선택된 항목인지 확인하고, 선택된 항목은 selectedItems에서 제거하고, 그렇지 않은 경우에는 selectedItems에 추가합니다. 마지막으로 셀을 다시 로드하여 선택 상태를 갱신합니다.

IGListBindingSelectionDelegate 사용하기

IGListKit에는 IGListBindingSelectionDelegate라는 프로토콜도 제공됩니다. 이 프로토콜은 선택 상태 관리에 특화되어 있으며, IGListBindingSectionController의 선택 상태를 관리하기 위해 사용됩니다.

이 프로토콜을 사용하면 IGListBindingSectionController와 상호작용하여 선택 상태를 관리할 수 있습니다. 사용 방법은 다음과 같습니다.

import IGListKit

class MySelectionHandler: NSObject, IGListBindingSelectionDelegate {
    var selectedItems = Set<Int>()

    func didSelectItem(at index: Int, cell: UICollectionViewCell) {
        // 선택될 때 호출됨
        guard let item = cell.model as? MyDataModel else { return }

        if selectedItems.contains(item.id) {
            selectedItems.remove(item.id)
        } else {
            selectedItems.insert(item.id)
        }

        cell.contentView.backgroundColor = selectedItems.contains(item.id) ? .blue : .white
    }

    func didDeselectItem(at index: Int, cell: UICollectionViewCell) {
        // 선택이 해제될 때 호출됨
        guard let item = cell.model as? MyDataModel else { return }
        cell.contentView.backgroundColor = .white
    }
}

class MySectionController: ListBindingSectionController<MyDataModel>, IGListBindingSectionControllerSelectionDelegate {
    var selectionHandler: MySelectionHandler?

    override init() {
        super.init()
        selectionHandler = MySelectionHandler()
        selectionDelegate = selectionHandler
    }
}

위의 코드는 MySelectionHandler 클래스와 MySectionController 클래스를 정의합니다. MySectionControllerListBindingSectionController를 상속받으며, IGListBindingSectionControllerSelectionDelegate를 선택 상태 관리에 사용합니다.

MySelectionHandler에서는 선택된 항목을 저장하기 위한 selectedItems를 선언하고, 선택과 해제 시에 호출되는 didSelectItemdidDeselectItem 메서드를 작성합니다. 선택 상태에 따라 셀의 배경색을 변경합니다.

MySectionController에서는 MySelectionHandler를 생성하여 selectionDelegate로 설정합니다. 이렇게 하면 선택 상태를 자동으로 관리하고 갱신할 수 있습니다.

이상으로 IGListKit을 사용하여 컬렉션 뷰 셀의 선택 상태를 관리하는 방법에 대해 알아보았습니다. IGListKit은 효율적인 데이터 관리와 선택 상태 관리를 위한 강력한 도구이므로, iOS 애플리케이션 개발에 유용하게 활용할 수 있습니다.

참고 자료: