Внедрить подборщик документов в быстром (iOS)
Я хочу выбрать файл любого типа (.pdf,.docs,.xlsx,.jpeg,.txt,.rtf и т.д.) в моем приложении iOS. Нажав кнопку Загрузить, я хочу, чтобы мое приложение открыло каталог и выделило файлы (DocumentsPicker
)
@IBAction pickDocument(sender: UIButton) {
//Open Document Picker
}
Любой подход сделать это в Swift
?
Ответы
Ответ 1
Используя возможности вашего проекта, включите iCloud
и Key-Sharing
.
![enter image description here]()
Импортируйте MobileCoreServices
в свой класс и, наконец, добавьте следующие три класса в свой UIViewController:
UIDocumentMenuDelegate,UIDocumentPickerDelegate,UINavigationControllerDelegate
Реализуйте следующие функции:
public func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let myURL = urls.first else {
return
}
print("import result : \(myURL)")
}
public func documentMenu(_ documentMenu:UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) {
documentPicker.delegate = self
present(documentPicker, animated: true, completion: nil)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("view was cancelled")
dismiss(animated: true, completion: nil)
}
Как все это назвать? Добавьте следующий фрагмент кода в функцию щелчка.
func clickFunction(){
let importMenu = UIDocumentMenuViewController(documentTypes: [String(kUTTypePDF)], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
}
Нажмите на кнопку. Появится следующее меню.
![MenuPicker]()
В случае с DropBox. При нажатии на любой предмет. Вы будете перенаправлены обратно в свое приложение, а URL-адрес будет зарегистрирован в вашем терминале.
![enter image description here]()
Манипулируйте documentTypes для ваших нужд. В моем приложении пользователи могут только Pdf. Итак, оденьтесь сами.
kUTTypePDF
kUTTypePNG
kUTTypeJPEG
...
Также, если вы хотите настроить свою собственную строку меню. Добавьте следующий код и настройте свою собственную функцию внутри обработчика
importMenu.addOption(withTitle: "Create New Document", image: nil, order: .first, handler: { print("New Doc Requested") })
![enter image description here]()
Наслаждайся этим.
Ответ 2
Вы можете использовать UIDocumentPickerViewController
для получения файлов из приложений "Файлы" или iCloud Drive.
- Активируйте
Key-value storage
и iCloud Documents
iCloud
из функции iCloud
:
![enter image description here]()
-
Импортируйте следующую платформу в контроллер представления, для которого вы хотите открыть средство выбора документов:
import MobileCoreServices
-
UIDocumentPickerDelegate
следующий метод из UIDocumentPickerDelegate
:
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
// you get from the urls parameter the urls from the files selected
}
-
Создайте UIDocumentPickerViewController
для отображения средства выбора файлов или iCloud Drive:
let types: [String] = [kUTTypePDF as String]
let documentPicker = UIDocumentPickerViewController(documentTypes: types, in: .import)
documentPicker.delegate = self
documentPicker.modalPresentationStyle = .formSheet
self.present(documentPicker, animated: true, completion: nil)
Если вы хотите, чтобы пользователь мог импортировать больше типов файлов в ваше приложение, вы должны добавить больше UTType
к types
NSArray
. Чтобы увидеть все доступные типы, вы можете проверить UTType Docs
Когда средство выбора документов открывается в iOS 11 и вы пытаетесь выбрать файл на Google Диске, возможно, этот файл отключен из-за ошибки: http://www.openradar.me/24187873
Ответ 3
UIDocumentMenuViewController
устарел с iOS11. Я также обнаружил, что он глючит при представлении из модального контроллера вида. Вот прямой способ использования сборщика:
import MobileCoreServices
private func attachDocument() {
let types = [kUTTypePDF, kUTTypeText, kUTTypeRTF, kUTTypeSpreadsheet]
let importMenu = UIDocumentPickerViewController(documentTypes: types as [String], in: .import)
if #available(iOS 11.0, *) {
importMenu.allowsMultipleSelection = true
}
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
present(importMenu, animated: true)
}
extension AViewController: UIDocumentPickerDelegate, UINavigationControllerDelegate {
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
viewModel.attachDocuments(at: urls)
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
controller.dismiss(animated: true, completion: nil)
}
}
Как обычно, не забудьте добавить поддержку iCloud: ![iCloud support]()
Ответ 4
Вы можете реализовать то, что вы описываете, используя NSURLSession
.
Вам нужно будет ограничить целевой каталог, который вы укажете в каталоге документов приложения. Приложения не имеют полного доступа к файловой системе.
Ответ 5
это поможет вам реализовать функцию загрузки/выгрузки
UIDocumentMenuViewController *importMenu = [[UIDocumentMenuViewController alloc] initWithDocumentTypes:@[@"public.item"] inMode:UIDocumentPickerModeImport | UIDocumentPickerModeExportToService];
Подробнее читайте Документация для Apple
Ответ 6
привет @Alexandros Я сделал то же самое, что вы упомянули выше, теперь я хочу сохранить это изображение или документ в базу данных, используя указанный URL-адрес, как это сделать, вы можете помочь с этим
Ответ 7
iCloud доступ ко всем типам файлов #
func openiCloudDocuments(){
let importMenu = UIDocumentPickerViewController(documentTypes: [String("public.data")], in: .import)
importMenu.delegate = self
importMenu.modalPresentationStyle = .formSheet
self.present(importMenu, animated: true, completion: nil)
}