Skip to content

Instantly share code, notes, and snippets.

@YusukeHosonuma
Created June 2, 2022 00:16
Show Gist options
  • Select an option

  • Save YusukeHosonuma/abf6e0688d681eeb6731548ddd78c563 to your computer and use it in GitHub Desktop.

Select an option

Save YusukeHosonuma/abf6e0688d681eeb6731548ddd78c563 to your computer and use it in GitHub Desktop.
SwiftUI: Drag and Drop
import SwiftUI
private let url = URL(string: "https://github.com/YusukeHosonuma")!
struct ContentView: View {
@State var isTargeted = false
@State var dropedURL: URL?
var body: some View {
VStack {
HStack {
List {
Text("Drag from")
.onDrag {
NSItemProvider(object: url as NSURL)
} preview: {
Text(url.absoluteString)
.fixedSize()
.foregroundColor(.green)
}
.padding()
.border(.red)
.contentShape(Rectangle())
}
List {
Text("Drop here")
.padding()
.border(.red)
.contentShape(Rectangle())
.background(isTargeted ? .yellow.opacity(0.7) : .clear)
.onDrop(of: [.url], isTargeted: $isTargeted) { providers in
for provider in providers {
_ = provider.loadObject(ofClass: URL.self) { url, _ in
dropedURL = url
}
}
return true
}
}
}
if let url = dropedURL {
Link("GitHub", destination: url)
.foregroundColor(.cyan)
.padding()
}
}
.font(.largeTitle)
.navigationTitle("Drag and Drop")
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
@YusukeHosonuma
Copy link
Copy Markdown
Author

2022-06-02.9.17.46.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment