IOS Drag&删除获取的文件的删除文件名

时间:2018-05-22 12:38:18

标签: ios swift

我正在使用IOS的Drop功能将pdf文件导入我的应用程序。有没有办法获取被删除文件的文件名?

我在UIDropSessionUIDropInteraction找不到任何内容。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以从UIDropSession获得名称,例如session.items.first?.itemProvider.suggestedName

答案 1 :(得分:-1)

如果是UITableView,请查看UITableViewDropItem.dragItem.itemProvider.suggestedName。它包含没有扩展名的文件名。

然后使用UITableViewDropCoordinator.session.loadObjects()异步加载文件并重建其文件名和扩展名。可以通过将UTI从NSItemProviderReading.object()映射到文件扩展名来重建扩展。

@available(iOS 11.0, *)
func tableView(_ tableView: UITableView, performDropWith coordinator: UITableViewDropCoordinator) {
    guard let indexPath = coordinator.destinationIndexPath else { return }

    for item in coordinator.items {
        guard let fileName = item.dragItem.itemProvider.suggestedName else { continue }

        let placeHolder = UITableViewDropPlaceholder(insertionIndexPath: indexPath, reuseIdentifier: "Placeholder", rowHeight: 44)
        placeHolder.cellUpdateHandler = { (cell) in
            // Configure cell
        }
        let context = coordinator.drop(item.dragItem, to: placeHolder)

        // Load file contents
        item.dragItem.itemProvider.loadObject(ofClass: PlaylistItemReader.self) { (reader, error) in

            DispatchQueue.main.async {
                guard let reader = reader as? PlaylistItemReader else {
                    context.deletePlaceholder()
                    return
                }

                // Convert file type to actual extension
                guard let fileExtension = PlaylistItem.typeToExtension[reader.fileType] else {
                    context.deletePlaceholder()
                    return
                }
                // fileExtension is something like "m4a" or "mp3"

                print("File '\(fileName).\(fileExtension)'")

                context.commitInsertion(dataSourceUpdates: { (insertionIndexPath) in
                    // update model
                })
            } // async

        } // load
    } // items
}

注意:PlaylistItemReader是我的自定义类,它实现了NSItemProviderReading协议。