[swift] IGListKit에서 다중 선택 가능한 셀 처리하는 방법

IGListKit은 iOS 앱에서 리스트 기반 인터페이스를 빠르고 효율적으로 구현할 수 있는 강력한 프레임워크입니다. IGListKit을 사용하여 다중 선택 가능한 셀을 처리하는 방법에 대해 알아보겠습니다.

1. IGListKit 설치

먼저, IGListKit을 설치해야 합니다. CocoaPods를 사용하여 설치하려면 Podfile에 다음 줄을 추가합니다:

pod 'IGListKit'

그런 다음 터미널에서 pod install 명령을 실행하여 IGListKit을 설치합니다.

2. 다중 선택 기능 추가

다음으로, 다중 선택 기능을 추가할 컬렉션 뷰 셀을 생성해야 합니다. 셀은 IGListBindable 프로토콜을 준수해야 합니다. 다음은 예시 코드입니다:

class MyItemCell: UICollectionViewCell, IGListBindable {
    var isSelected: Bool = false {
        didSet {
            // 선택 상태에 따라 표시를 업데이트하는 로직 추가
            // 예를 들어, 배경색 변경 또는 체크마크 아이콘을 표시하는 등의 동작 수행
            self.contentView.backgroundColor = isSelected ? .blue : .white
        }
    }
    
    func bindViewModel(_ viewModel: Any) {
        if let item = viewModel as? MyItem {
            isSelected = item.isSelected
            // 다른 데이터 항목에 대한 바인딩 로직
        }
    }
}

위의 예시 코드에서 MyItem은 컬렉션 뷰에 표시될 데이터 항목입니다. 이 예시에서는 isSelected 속성으로 셀의 선택 상태를 추적하고, bindViewModel 메서드를 사용하여 데이터를 셀에 바인딩합니다.

3. 선택 관리

이제 선택된 항목의 목록을 관리할 클래스를 생성해야 합니다. 이 클래스는 IGListAdapterDelegate 프로토콜을 준수해야 합니다. 다음은 예시 코드입니다:

class MySelectionManager: NSObject, IGListAdapterDelegate {
    var selectedItems: [MyItem] = []
    
    func listAdapter(_ listAdapter: IGListAdapter, shouldSelect sectionController: IGListSectionController, with item: Any, at index: Int) -> Bool {
        guard let myItem = item as? MyItem else { return false }
        
        if let existingIndex = selectedItems.firstIndex(where: { $0.id == myItem.id }) {
            // 이미 선택된 경우 선택 해제
            selectedItems.remove(at: existingIndex)
        } else {
            // 선택되지 않은 경우 선택
            selectedItems.append(myItem)
        }
        
        return true
    }
}

위의 예시 코드에서 MyItem은 컬렉션 뷰에 표시될 데이터 항목이며, selectedItems 배열은 선택된 항목의 목록을 저장합니다. listAdapter(_:shouldSelect:with:at:) 메서드를 사용하여 항목을 선택 또는 선택 해제하고, 선택된 항목의 목록을 업데이트합니다.

4. 리스트 어댑터에 선택 관리 설정

마지막으로, IGListAdapter에 선택 관리 객체를 설정해야 합니다. listAdapter(_:sectionControllerFor:) 메서드를 사용하여 해당 섹션 컨트롤러에 선택 관리 객체를 할당해야 합니다. 다음은 예시 코드입니다:

let selectionManager = MySelectionManager()
let adapter = IGListAdapter(updater: IGListAdapterUpdater(), viewController: self, workingRangeSize: 0)
adapter.collectionView = collectionView
adapter.dataSource = self
adapter.delegate = selectionManager

func listAdapter(_ listAdapter: IGListAdapter, sectionControllerFor object: Any) -> IGListSectionController {
    let sectionController = MySectionController()
    sectionController.selectionDelegate = selectionManager
    return sectionController
}

위의 예시 코드에서 selectionManager는 선택 관리 객체를 생성한 인스턴스입니다. adapter.dataSource를 구현한 클래스로 이동한 뒤, listAdapter(_:sectionControllerFor:) 메서드에서 해당 섹션 컨트롤러에 선택 관리 객체를 할당합니다. 이렇게 하면 선택 관리 객체를 사용하여 다중 선택 기능을 처리할 수 있습니다.

이제 IGListKit에서 다중 선택 가능한 셀을 처리하는 방법을 알게 되었습니다. IGListKit은 새로운 리스트 기반 인터페이스를 구현할 때 유용한 도구입니다. 추가적인 정보는 IGListKit 공식 문서에서 확인할 수 있습니다.