在WWDC 2022中,苹果引入了Transferable协议,以一种简单的方式支持拖放操作.我如何将这项新技术(与新的draggable和dropDestination修饰符相结合)用于SwiftUItables(不是列表)?
TableRowContent不支持draggable
和dropDestination
修改器.此外,将修改器直接应用于TableColumn
中的视图时,拖放操作将仅对该特定单元格起作用,而不是对整行起作用.将修饰符添加到所有单元格时,例如在行内的空白区域中拖动时,它仍然不起作用.
struct Item: Identifiable, Codable, Transferable {
let id = UUID()
let text: String
static var transferRepresentation: some TransferRepresentation {
CodableRepresentation(contentType: .text)
}
}
struct Test: View {
var body: some View {
Table {
TableColumn("Column 1") { item in
Text(item.text)
.draggable(item) // This does only work when dragging not in the space between two columns
}
TableColumn("Column 2") { item in
Text(item.text)
.draggable(item) // This does only work when dragging not in the space between two columns
}
} rows: {
ForEach([Item(text: "Hello"), Item(text: "World")]) { item in
TableRow(item)
.draggable(item) // This causes a compile-time error
.itemProvider { ... } // This does not work with Transferable and thus support my use case
}
}
}
}
我想要一个类似于TableRowContent
上的itemProvider修饰符和最近添加的contextMenu修饰符的行为,它们允许对整个表行进行相应的操作.我不能使用itemProvider
,因为它需要返回NSItemProvider,这不支持我将文件从网络驱动器拖到Mac硬盘驱动器的用例.