SwiftUI拖拽onDrag
SwiftUI拖拽onDrag

SwiftUI拖拽onDrag

onDrag 是 SwiftUI 中用于实现拖拽(Drag and Drop)功能的修饰符,它允许将某个视图变成“可以拖拽的内容源”。

View.onDrag(_ data: @escaping () -> NSItemProvider?)

它表示:当用户在这个视图上长按并开始拖拽时,提供一个 NSItemProvider,用于系统识别拖动的内容类型(如图像、文字、文件等)。

示例:拖拽图片

Image(nsImage: myImage)
    .onDrag {
        let provider = NSItemProvider(object: myImage)
        return provider
    }

当这张图片上开始拖动,macOS 会调用 .onDrag 中的闭包,将 myImage 封装为一个 NSItemProvider,系统就能识别这个拖拽操作并允许拖到 Finder、桌面或其他接受拖拽的 App。

适用场景

1、拖出图像:NSImage、UIImage;

2、拖出文件路径:URL(fileURLWithPath:);

3、拖出文本内容:NSString、String;

4、拖出 PDF:NSData 或 NSFileWrapper;

5、拖出多种类型:NSItemProvider 支持多类型加载方式。

使用示例

1、拖出字符串

Text("拖我一下")
    .onDrag {
        NSItemProvider(object: "Hello World" as NSString)
    }

2、拖出图片

Image(nsImage: image)
    .onDrag {
        NSItemProvider(object: image)
    }

注意事项

.onDrag 只能用在 macOS / iPadOS / 支持拖拽的视图上。

NSItemProvider 是 UIKit/AppKit 层的 API,SwiftUI 只是桥接它。

拖动图片、文件或文字都要依赖 NSItemProvider 包装内容。

相关文章

Apple NSItemProvider类:https://fangjunyu.com/2025/07/09/apple-nsitemprovider%e7%b1%bb/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注