簡體   English   中英

SwiftUI 用列表拖放

[英]SwiftUI Drag and Drop with a list

您知道如何使用 SwiftUI 在 Apple 的“提醒”應用程序中實現拖放結果嗎? 如果沒有,我怎么能用 UIKit 為 SwiftUI 做一個 UIViewRepresentable(來自 UIKit)的拖放功能?

請看下面的圖片。

任何建議將不勝感激。

在此處輸入圖像描述

到目前為止,還沒有真正的引導方法來拖放。 .onDrag 修飾符似乎只適用於 iPad。 我的建議是您使用 UIViewRepresentable 並制作一個表格視圖(UI 工具包),然后從那里實現拖放。

本教程包含您需要的一切,並且很容易跟進。 (作為旁注,SwiftUI 確實很容易,而不是在 UIKit 中必須這樣做)。

https://www.vadimbulavin.com/add-edit-move-and-drag-and-drop-in-swiftui-list/

更新:我添加了一些關於如何解決問題的解釋。

腳步:

  1. 在您的列表中添加一個處理程序 for.onInsert(),
  2. 實現該處理程序。

處理程序簽名是(Int, [NSItemProvider]) ,它為您提供拖放的itemProvidersindex ,以及為您提供有關已刪除內容的信息的 itemProviders。

struct EditListView: View {
   @State private var items: [Item] = [
      Item(title: "Apple"),
      Item(title: "Banana"),
      Item(title: "Papaya"),
      Item(title: "Mango")
   ]
   
   var body: some View {
      NavigationView{
         List {
            ForEach(
               items,
               id: \.self
            ) { item in
               Text(item.title)
            }
            .onInsert(of: [String(kUTTypeURL)], perform: onInsert)
         }
         .navigationTitle("Fruits")

      }
   }
   
   private func onInsert(at offset: Int, itemProvider: [NSItemProvider]) {
      for provider in itemProvider {
        // check if object is of URL type 
         if provider.canLoadObject(ofClass: URL.self) {
            // load the object and add it on screen
            _ = provider.loadObject(ofClass: URL.self) { url, error in
               DispatchQueue.main.async {
                  url.map { self.items.insert(Item(title: $0.absoluteString), at: offset) }
               }
            }
         }
      }
   }
   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM