我想知道是否可以使用View.onDrag和手动View.onDrop添加拖放重新排序LazyGrid?
虽然我能够使用 使每个项目都可以拖动onDrag,但我不知道如何实现放置部分。
这是我正在试验的代码:
import SwiftUI
//MARK: - Data
struct Data: Identifiable {
let id: Int
}
//MARK: - Model
class Model: ObservableObject {
@Published var data: [Data]
let columns = [
GridItem(.fixed(160)),
GridItem(.fixed(160))
]
init() {
data = Array<Data>(repeating: Data(id: 0), count: 100)
for i in 0..<data.count {
data[i] = Data(id: i)
}
}
}
//MARK: - Grid
struct ContentView: View {
@StateObject private var model = Model()
var body: some …Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的 SwiftUI Mac 应用程序添加“拖放”手势/功能。
我想将文件从我的系统/桌面拖放到我的应用程序中。我发现它在常规 Swift 中是可能的。我现在正在尝试在 SwiftUI 中执行此操作。
我onDrop()在 SwiftUI for Views 中找到了一个函数。但是,看起来这仅适用于我的应用程序中的内部手势。我想从外部拖动文件。
在 Swift 中,您需要为拖动的类型注册您的 NSView。
registerForDraggedTypes([kUTTypeFileURL,kUTTypeImage])
Run Code Online (Sandbox Code Playgroud)
我想创建一个 NSViewRepresentable 并将其包装到我的 SwiftUI 视图中。
这是我想出的代码,但是我无法调用registerForDraggedTyped.
final class DragDropView: NSViewRepresentable {
func makeNSView(context: NSViewRepresentableContext<DragDropView>) -> NSView {
let view = NSView()
view.registerForDraggedTypes([NSPasteboard.PasteboardType.pdf, NSPasteboard.PasteboardType.png])
return view
}
func updateNSView(_ nsView: NSView, context: NSViewRepresentableContext<DragDropView>) {
}
Run Code Online (Sandbox Code Playgroud)
在 SwiftUI 中是否有更简单的解决方案?我很想使用 onDrop() 函数,但这不适用于外部文件,是吗?