UIDocumentInteractionController

Недавно, в комментариях к статье о 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *