ยังไงฉันสามารถย้ายรายชื่อรายการได้โดยไม่ต้องแสดง/ซ่อน EditMode

0

คำถาม

ฉันกำลังสร้างสิ่งที่จะทำรายชื่อแอ๊ปอยู่ใน SwiftUI. ความสามารถของคุณสมบัติที่ฉันอยากจะดำเนินเป็นความสามารถแยกรายชื่อของคุณด้วยตนเองดังนั้นฉัน integrated ที่ functionality ใช้ .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)
}
}

แต่ฉันไม่ได้มีความสุขกับเรื่องนี้ Implementation อย่างที่ฉันยังต้องใช้แรงยึดได้จาก EditMode และมันก็ยังทำลาย SwipeActions เช่นปุ่ม functionality.

ดังนั้นฉันสามารถย้ายรายชื่อรายการโดยไม่มีการใช้ 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 implementation:

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
}
}

โปรดทราบ:ตอนรายการตอนนี้ต้อง conform ต้อง Identifiable & Equatable ดังนั้นขนาดเล็กที่สุด Implementation คือ:

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

และคุณยังต้องการที่จะนำเข้า:

import UniformTypeIdentifiers

ในคำสั่งที่ใช้ลากและวางเพื่อ functionality

2021-11-24 13:26:10

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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