Как узнать (программно), есть ли/нет зарегистрированных приложений, которые поддерживают открытие определенного типа документа?

В документации Apple для метода UIDocumentInteractionController presentOpenInMenuFromBarButtonItem:animated: указано, что «если нет зарегистрированных приложений, поддерживающих открытие документа, контроллер взаимодействия с документом не отображает меню». В моем приложении я хочу отображать кнопку в том и только в том случае, если на устройстве есть приложение, которое ее откроет. (Я только хочу, чтобы кнопка открывала меню для открытия файла; мне не нужны QuickLook, Copy или Print). В настоящее время, если кнопка есть, но не зарегистрировано ни одного приложения, которое может открыть соответствующий файл, пользователь получает неудовлетворительное впечатление от кнопки, которая ничего не делает при нажатии.

Итак - могу ли я узнать, есть ли / нет зарегистрированных приложений, поддерживающих открытие определенного типа документа? Очевидно, экземпляры UIDocumentInteractionController могут это обнаружить. Есть ли общедоступный API способ узнать это?


person Obliquely    schedule 04.06.2011    source источник


Ответы (1)


Хорошо, дополнительные исследования показывают, что у пользователя stackoverflow frenchkiss-dev есть solution - получено в результате более внимательного прочтения документов, чем я, и некоторых нестандартных размышлений . Мой код ниже, основанный на ответе frenchkiss-dev, находится в методе ViewDidAppear и отключает мою кнопку, если открытие, а затем закрытие меню открытого файла (без анимации) показывает, что нет приложений, которые могут обрабатывать открытие файла. Контекст для этого фрагмента заключается в том, что UIDocumentInteractionController уже настроен в viewDidLoad и доступен через [self docInteractionController].

BOOL isAnAppToOpenURL = [[self docInteractionController] presentOpenInMenuFromRect:CGRectZero inView:[self view] animated: NO];
[[self docInteractionController] dismissMenuAnimated:NO];

if (!isAnAppToOpenURL)
{
    // iOS think NO app is present on the device that
    // can open the URL set on the UIDocumentInteractionController
    [[self openFileButton] setEnabled:NO];
}
person Obliquely    schedule 04.06.2011