कैसे कर सकते हैं मैं चाल सूची आइटम के बिना टॉगल करने के लिए EditMode

0

सवाल

मैं वर्तमान में हूँ के निर्माण के लिए एक ToDo सूची अनुप्रयोग में SwiftUI. एक विशेषता है कि मैं वास्तव में चाहते हैं को लागू करने के लिए की क्षमता है करने के लिए क्रमबद्ध अपनी सूची में मैन्युअल रूप से है, तो मैं एकीकृत कार्यक्षमता का उपयोग कर एक .onMove संशोधक पर ForEach पाश populating मेरे 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ý
..................................................................................................................