반응형

 

Hacking with Swift 사이트의 강좌 번역본입니다.

 

[원문 : https://www.hackingwithswift.com/quick-start/swiftui/how-to-let-users-move-rows-in-a-list]

 

How to let users move rows in a list

 

SwiftUI는 목록에 있는 항목들에 onMove(perform:) modifier를 붙여서 행을 이동할 수 있도록 목록에 간단히 잡을수(hooks) 있는 것을 제공하고, 이동하는 작업이 발생했을때 선택된 메소드를 호출하도록 합니다. 해당 메소드는 다음과 같이 sourece IndexSet와 destination Int가 필요합니다.

func move(from source: IndexSet, to destination: Int) {

 

여러개의 항목들을 이동할때 항상 뒤에 있는 것을 먼저 이동하는 것이 좋은 생각이므로, 다른 항목을 이동하거나 인덱스를 혼동되지 않도록 합니다. 다행히, Swift의 시퀀스는 index set을 이동시키는 것이 내장되어 있으므로, 매개별수를 전달하고 정확히 동작하도록 할 수 있습니다. 

 

예제 처럼, 3개의 사용자 이름 문자열의 배열을 설정한 ContentView 구조체를 만들수 있고, SwiftUI는 move() 메소드를 호출해서 그것들을 이동시킬 수 있습니다. 이동하는 것을 활성화 하기 위해서(예를들어, 드래그 처리기가 나타나도록) 네비게이션 뷰에 편집 버튼을 추가해서 사용자가 편집모드를 토글할 수 있습니다.

 

코드는 다음과 같습니다.

struct ContentView: View {
    @State private var users = ["Paul", "Taylor", "Adele"]

    var body: some View {
        NavigationView {
            List {
                ForEach(users, id: \.self) { user in
                    Text(user)
                }
                .onMove(perform: move)
            }
            .navigationBarItems(trailing: EditButton())
        }
    }

    func move(from source: IndexSet, to destination: Int) {
        users.move(fromOffsets: source, toOffset: destination)
    }
}

 

반응형
Posted by 까칠코더
,