어떻게 이동할 수 있는 목록 항목하지 않고도 전환 EditMode

0

질문

나는 현재 건물은 일 목록 응용 프로그램에서 SwiftUI. 하나의 기능이 내가 정말 좋아를 구현하는 능력을 정의 목록을 수동으로,그래서 나는 통합 기능을 사용하여 .onMove 수정자에 ForEach 루프를 채우기 나 List었지만 전환 EditMode 수동으로,그래서 나는 설정 EditMode 할 목록 .active 다음과 같다:

import SwiftUI

struct ContentView: View {
@State private var items = ["1", "2", "3"]
@State var editMode: EditMode = .active

var body: some View {
    List {
        ForEach(items, id: \.self) { item in
            Text("Item \(item)")
        }
        .onMove(perform: { _, _  in })
    }
    .environment(\.editMode, $editMode)
}
}

그러나 나는 행복하지 않으로 이 구현으로,아직도 있을 사용하여 그립에서 EditMode,그리고 그것은 또한 휴식 SwipeActions 뿐만 아니라 버튼 기능이 있습니다.

그래서 어떻게 이동할 수 있는 목록 항목을 사용하지 않고 EditMode?

swiftui swiftui-list
2021-11-22 16:50:54
1

최고의 응답

0

에 따라 Asperi 의 대답에서 질문 저는 구현된 드래그 앤 드롭 동작는 그 문제를 해결하기 위해 다음과 같다:

struct ContentView: View {

@State var items = [Item(id: 1), Item(id: 2), Item(id: 3), Item(id: 4)]
@State private var dragging: Item?

var body: some View{
    List{
        ForEach(items){ item in
            Text("Item \(item.id)")
                .onDrag {
                    self.dragging = item
                    return NSItemProvider(object: NSString())
                }
                .onDrop(of: [UTType.text], delegate: DragDelegate(current: $dragging))
        }
        .onMove(perform: {_, _  in })
    }
}
}

를 사용하여 DropDelegate 구현:

struct DragDelegate<Item: Equatable>: DropDelegate {
@Binding var current: Item?

func dropUpdated(info: DropInfo) -> DropProposal? {
    DropProposal(operation: .move)
}

func performDrop(info: DropInfo) -> Bool {
    current = nil
    return true
}
}

참고:이 품목제 준수 Identifiable & Equatable 그래서 최소한의 구현은:

struct Item: Identifiable, Equatable{
let id: Int
}

그리고 당신은 또한 가져올 필요가:

import UniformTypeIdentifiers

을 사용하기 위해서 드래그 앤 드롭 기능

2021-11-24 13:26:10

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................