我正在使用IOS的Drop功能将pdf文件导入我的应用程序。有没有办法获取被删除文件的文件名?
我在UIDropSession
或UIDropInteraction
找不到任何内容。
谢谢!
答案 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
协议。