【问题标题】:How to get the filename of dropped file in SwiftUI?如何在 SwiftUI 中获取已删除文件的文件名?
【发布时间】:2020-02-23 02:26:50
【问题描述】:

我一直在尝试找出如何将图像的文件名放入 SwiftUI 视图中。

代码片段如下:

struct MainView: View, DropDelegate {

  @ObservedObject var userState : UserState

  var body : some View {
    Group {
      if (self.userState.editing) {
        BlackoutView()
      } else {
        DropView()
      }
    }
    .frame(minWidth: 320, idealWidth: 640, maxWidth: .infinity, minHeight: 240, idealHeight: 480, maxHeight: .infinity, alignment: .center)
    .onDrop(of: [(kUTTypeImage as String), "public.pdf"], delegate: self)
  }

  func dropUpdated(info: DropInfo) -> DropProposal? {
    let proposal = DropProposal.init(operation: .copy)
    return proposal
  }

  func performDrop(info: DropInfo) -> Bool {
    print("perform drop")
    userState.editing = true
    return true
  }

}

当我将图像放到应用程序上时,它会运行 performDrop。怎样才能获得拖放到应用程序上的图像的文件名?

它在 macOS 上运行。

【问题讨论】:

    标签: macos drag-and-drop swiftui


    【解决方案1】:

    花了一个多小时在 API 上苦苦挣扎(文档几乎不存在),这对我有用:

    // The onDrop registration
    .onDrop(of: [(kUTTypeFileURL as String)], delegate: self)
    

    ...

    func performDrop(info: DropInfo) -> Bool {
    
        guard let itemProvider = info.itemProviders(for: [(kUTTypeFileURL as String)]).first else { return false }
    
        itemProvider.loadItem(forTypeIdentifier: (kUTTypeFileURL as String), options: nil) {item, error in
            guard let data = item as? Data, let url = URL(dataRepresentation: data, relativeTo: nil) else { return }
            // Do something with the file url
            // remember to dispatch on main in case of a @State change
        }
    
        return true
    }
    

    请注意,我省略了任何验证,因此此代码会从任何已删除的文件中获取第一个 url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多