我在我的 macOS 应用程序边栏中有一个列表。当我添加 .onDrag
修改器时,拖动 NSItemProvider
可以正常工作,但点击/选择该项来触发 NavigationLink
会被阻止。
struct ContentView: View {
var body: some View {
NavigationView {
List(Data.items) { item in
NavigationLink(
destination: Text(item.text),
label: {
Text(item.text)
.lineLimit(5)
// Enabling dragging with .onDrag {} disables click and selection:
.onDrag { return NSItemProvider(object: item.url as NSURL) }
})
}
Text("Placeholder")
}
}
}
我如何在保持正常列表选择行为不变的同时添加拖动行为?
以下是最小可重现示例的其余部分:
import SwiftUI
@main
struct ListDragExampleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
struct Data {
struct Item: Identifiable {
let id = UUID()
let text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat."
let url = URL(string: "http://example.com")!
}
static let items = [
Item(),
Item(),
Item()
]
}