Недавно, в комментариях к статье о URL-схемах попросили рассказать как вызывать другие приложения для открытия документа. Задача довольно простая и не требует танцев с бубном. Все дело в классе UIDocumentInteractionController. Он скрывает за собой возможность открытия документа в других приложениях.
Для начала скажу, что UIDocumentInteractionController работает только с локальными файлами, несмотря на то, что в него нужно передавать NSURL и можно передать URL на любой файл в интернете. Если передать ссылку на файл в интернете — мы просто получим краш.
В этом примере мы будем открывать PDF-документ в других приложениях.
Итак, все самое простое начинается тут, будем показывать PDF:
// узнаем путь до нашего PDF
NSURL* fileURL = [[NSBundle mainBundle] URLForResource:@"idevby" withExtension:@"pdf"];
// создаем контроллер
UIDocumentInteractionController* controller = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
Чтобы показать такое меню, а точнее UIActionSheet, который вы видите на скриншоте:
[controller presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
Есть и второй метод, который показывает такое же меню:
- (BOOL)presentOpenInMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
Как видим, тут изменился только источник, откуда будет показан контроллер.
Вот и все! Задача решена. Как бонус, можно получить значки документа (например, как их показывает Mail):
NSArray* icons = controller.icons;
В массиве icons будут изображения UIImage.
Так же, UIDocumentInteractionController можно использовать для предпросмотра документов. Об этом я постараюсь рассказать в следующей части и это будет связано с QLPreviewController.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: