swift - iOS 11 拖放 UIDocument

标签 swift drag-and-drop uidocument

除了如何处理 UIDocuments 之外,关于拖放的一切都很清楚。

这是我的(不工作的)实现...

对于拖动:

func tableView(_ tableView: UITableView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {

    let doc = DataManager.shared.storage[indexPath.row] // the UIDocument to drag
    let itemProv = NSItemProvider()
    itemProv.registerFileRepresentation(forTypeIdentifier: "com.mybundle.myapp.myextension",
                                        fileOptions: [.openInPlace],
                                        visibility: .all) { completionHandler in

        completionHandler(doc.fileURL, true, nil)
        return nil
    }

    // DragItem
    let item = UIDragItem(itemProvider: itemProv)

    return [item]
}

对于掉落:

func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {

    for item in coordinator.session.items {
        item.itemProvider.loadFileRepresentation(forTypeIdentifier: "com.mybundle.myapp.myextension", completionHandler: { (url, error) in

            if let docUrlOk = url {
                debugPrint(urlOk.absoluteString)
                DataManager.shared.load(docUrlOk)
            }
        })
    }
}

以及更新方法:

func tableView(_ tableView: UITableView, dropSessionDidUpdate session: UIDropSession, withDestinationIndexPath destinationIndexPath: IndexPath?) -> UITableViewDropProposal {

    if tableView.hasActiveDrag {
        if session.items.count > 1 {
            return UITableViewDropProposal(operation: .cancel)
        } else {
            return UITableViewDropProposal(operation: .move, intent: .insertAtDestinationIndexPath)
        }
    } else {
        return UITableViewDropProposal(operation: .copy, intent: .insertAtDestinationIndexPath)
    }
}

非常感谢

最佳答案

在与 Apple 工程师进行大量交谈后,我找到了一个“半”解决方案。问题中发布的代码是正确的,但是要将专有文件从您的 App 拖到 Files App,您必须在 Target -> Info -> Exported UTIs 字段中插入以下值 enter image description here

但是如果你将你的专有文件从文件应用程序拖回你的应用程序,UIKit 中有一个错误会阻止它正常工作......工程师告诉我等待 iOS 11.3 或 iOS 12,我们会看到

关于swift - iOS 11 拖放 UIDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939582/

相关文章:

c# - 在 C# 中拖放?

iphone - 为什么 UIDocument 需要 40 秒才能加载?

ios - 带有 Any 的 Swift 泛型

ios - NSURLRequest swift 出现 fatal error 异常

ios - 创建一个相对于设备定位并面向真实世界航向的 SCNNode

javascript - 删除文件,文件属性无法读取未定义

iphone - 在 WPF 中排列 GUI 元素的方式与 iPhone 上的应用程序类似

ios - 打开 UIDocument 时如何显示错误信息?

objective-c - iOS5.1 : synchronising tasks (wait for a completion)

ios - 为什么自动调整表格 View 单元格中的 UIImageView 具有内容模式 AspectFit 的原始高度?