Как определить (программно), есть ли / нет какие-либо зарегистрированные приложения, которые поддерживают открытие определенного типа документа? - PullRequest
6 голосов
/ 04 июня 2011

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

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

Ответы [ 2 ]

11 голосов
/ 04 июня 2011

ОК, дальнейшие исследования показывают, что пользователь stackoverflow frenchkiss-dev имеет решение - полученное в результате более тщательного чтения документов, чем я, и некоторого побочного мышления. Приведенный ниже код, основанный на ответе 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];
}
1 голос
/ 10 октября 2013
//Connect up theOpenInBtn in IB


@interface DocumentViewerViewController ()
{

    IBOutlet UIWebView *webView;
    NSURL *fileURL;
    NSData *fileOnline;
    UIDocumentInteractionController *dic;
    IBOutlet UIBarButtonItem *theOpenInBtn;

}


(void)viewDidLoad
{
     [super viewDidLoad];


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

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


}
...