在WWDC 2022中,苹果引入了Transferable协议,以一种简单的方式支持拖放操作.我如何将这项新技术(与新的draggabledropDestination修饰符相结合)用于SwiftUItables(不是列表)?

TableRowContent不支持draggabledropDestination修改器.此外,将修改器直接应用于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硬盘驱动器的用例.

推荐答案

我发现你可以在NSItemProvider中注册Transferable个对象:

TableRow(item)
    .itemProvider {
        let provider = NSItemProvider()
        provider.register(item)
        return provider
    }

遗憾的是,itemProvider闭包已经在拖放会话开始时调用,而不是在执行拖放时调用.但我想这个问题是一个需要回答的不同问题.

Ios相关问答推荐

如何从ipad获取用户定义的设备名称,IOS版本应大于16在flutter

彩色进度线--SWIFT

不使用iOS 17修改器修改SWIFT用户界面视图

更改文本在Flutter 中的位置

当包含UITextView的inputAccessoryView显示键盘时,iOS UITableView内容会出现UINavigationBar奇怪的错误

iOS 17-在Xcode 15中添加导航控制器时,导航栏不会立即显示

分配给指针会通过 class_addMethod 导致 EXC_BAD_ACCESS

无法关闭包含字体 Select 器的工作表

AVAudioRecord 没有音频

如何将 AppIntent 添加到应用程序目标并在交互式小部件中使用它

如何从单独的视图更改修饰符的值

如果使用 .onAppear 设置,为什么 SwiftUI Picker 不显示正确的选定值

react 本机 |错误:无法解析 node_modules/react-native/index.js 中的模块

具有一个参数/参数的泛型类的泛型类

PropertyWrapper 不存在的 Codable 属性的默认值

向左或向右移动时如何水平翻转sprite?

如何将标准化坐标系中的点的位置转换为具有相对位置的常规坐标系?

如何在 Xcode 4 中切换 .h 和 .m

try 在 iOS 中处理后退导航按钮操作

正确的领域使用模式/最佳实践?