相关疑难解决方法(0)

SwiftUI | 使用 onDrag 和 onDrop 对单个 LazyGrid 中的项目重新排序?

我想知道是否可以使用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)

collectionview ios swift swiftui xcode12

25
推荐指数
6
解决办法
8946
查看次数

SwiftUI 拖放文件

我正在尝试向我的 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() 函数,但这不适用于外部文件,是吗?

macos swift swiftui

7
推荐指数
2
解决办法
5233
查看次数

标签 统计

swift ×2

swiftui ×2

collectionview ×1

ios ×1

macos ×1

xcode12 ×1