SwitUI“ForEach”在插入时拖放

发布时间:2021-03-07 09:01

我尝试使用“.onInsert()”在一个视图中从不同部分拖放“ForEach”行,通过搜索我发现下面的示例代码工作正常,但问题不是解释如何拖动“ForEach” " 行,因为它从 safari 应用程序中拖出一个 URL,找到如何将“ForEach”行从一个部分拖放到另一个“ForEach”部分的任何帮助。

import SwiftUI
import MobileCoreServices

struct Item: Identifiable {
    let id = UUID()
    let title: String
}

struct DragAndDropFromAnotherApp: View {

    @State private var items: [Item] = (0..<5).map { Item(title: "Item #\($0)") }
    
    var body: some View {
        List {
            ForEach(items) { item in
                Text(item.title)
            }
            .onInsert(of: [String(kUTTypeURL)], perform: onInsert)
        }
        
        .navigationBarTitle("List")
    }
    
    private func onInsert(at offset: Int, itemProvider: [NSItemProvider]) {
        for provider in itemProvider {
            if provider.canLoadObject(ofClass: URL.self) {
                _ = provider.loadObject(ofClass: URL.self) { url, error in
                    DispatchQueue.main.async {
                        url.map { self.items.insert(Item(title: $0.absoluteString), at: offset) }
                    }
                }
            }
        }
    }
}
回答1