[swift] IGListKit에서 섹션의 위치 변경하는 방법

IGListKit은 iOS 앱에서 복잡한 리스트 UI를 관리하기 위한 강력한 프레임워크입니다. IGListKit을 사용하면 섹션의 위치를 쉽게 변경할 수 있습니다. 이 글에서는 IGListKit을 사용하여 섹션의 위치를 변경하는 방법을 알아보겠습니다.

IGListKit 설치

먼저, IGListKit을 프로젝트에 설치해야 합니다. IGListKit은 CocoaPods를 통해 간단하게 설치할 수 있습니다. Podfile에 다음과 같이 IGListKit을 추가하고, pod install 명령으로 설치합니다.

platform :ios, '11.0'
use_frameworks!

target 'YourApp' do
  pod 'IGListKit', '~> 3.0'
end

섹션의 위치 변경하기

IGListKit에서 섹션의 위치를 변경하려면 IGListSectionController 객체의 moveObject(from:to:) 메서드를 사용해야 합니다. 이 메서드는 섹션의 데이터를 다른 위치로 이동시키는 역할을 합니다.

예를 들어, 다음과 같이 섹션의 위치를 변경하는 코드를 작성할 수 있습니다.

class MySectionController: IGListSectionController {
    var data: [String] = []
    
    // ...

    func moveItem(fromIndex from: Int, toIndex to: Int) {
        guard let updater = collectionContext?.sectionController(forSection: self) as? ListAdapterUpdater else {
            return
        }
        
        updater.performBatch(animated: true, updates: { context in
            let item = data.remove(at: from)
            data.insert(item, at: to)
            
            context.moveItem(at: from, to: to)
        }, completion: nil)
    }
}

위 코드에서 moveItem(fromIndex:toIndex:) 메서드는 from 인덱스 위치의 데이터를 to 인덱스 위치로 이동시킵니다. 이 메서드는 IGListKit의 ListAdapterUpdater를 사용하여 업데이트를 수행하고, UI에 반영합니다.

이동 버튼을 통한 섹션 위치 변경하기

마지막으로, 사용자가 이동 버튼을 터치하여 섹션의 위치를 변경할 수 있도록 UI를 구성해야 합니다. 이를 위해 사용자가 이동할 위치를 선택할 수 있는 다이얼로그를 표시하고, 선택된 위치를 이용하여 moveItem(fromIndex:toIndex:) 메서드를 호출하는 코드를 작성해야 합니다.

내비게이션 바에 추가된 이동 버튼과 관련된 코드 예시는 다음과 같습니다.

class ViewController: UIViewController {
    var sectionController: MySectionController?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // ...

        let moveButton = UIBarButtonItem(title: "Move", style: .plain, target: self, action: #selector(moveButtonTapped))
        navigationItem.rightBarButtonItem = moveButton
    }
    
    @objc func moveButtonTapped() {
        guard let sectionController = sectionController else {
            return
        }
        
        let alertController = UIAlertController(title: "Move Section", message: nil, preferredStyle: .actionSheet)
        
        for i in 0..<sectionController.data.count {
            let action = UIAlertAction(title: "\(i + 1)", style: .default) { [weak self] _ in
                sectionController.moveItem(fromIndex: <현재 섹션 인덱스>, toIndex: i)
                // 여기서 <현재 섹션 인덱스>는 이동할 섹션의 현재 인덱스를 의미합니다.
            }
            
            alertController.addAction(action)
        }
        
        present(alertController, animated: true, completion: nil)
    }
}

위 예시 코드에서 moveButtonTapped() 메서드는 사용자가 이동 버튼을 터치하면 호출됩니다. 이를 통해 사용자에게 이동할 위치를 선택할 수 있는 다이얼로그를 표시하고, 선택된 위치를 moveItem(fromIndex:toIndex:) 메서드에 전달하여 섹션의 위치를 변경할 수 있습니다.

마무리

이렇게 IGListKit을 사용하여 섹션의 위치를 변경하는 방법을 알아보았습니다. IGListKit은 더욱 복잡한 리스트 UI를 쉽게 관리할 수 있는 강력한 도구입니다. 섹션의 위치 변경 외에도, IGListKit은 다양한 기능을 제공하므로, 관련 문서를 참고하여 더 많은 기능을 알아보세요.

참고 자료