2011-06-04 1 views
6

La documentation d'Apple pour UIDocumentInteractionController presentOpenInMenuFromBarButtonItem: animated: method indique que "S'il n'y a aucune application enregistrée qui supporte l'ouverture du document, le contrôleur d'interaction du document n'affiche pas de menu." Dans mon application, je veux afficher un bouton si et seulement si il ya une application sur l'appareil qui va l'ouvrir. (Je veux seulement que le bouton ouvre un menu pour ouvrir un fichier, je ne veux pas QuickLook, Copier ou Imprimer). Dans l'état actuel des choses, si le bouton est là, mais qu'aucune application n'est enregistrée pouvant ouvrir le fichier concerné, l'utilisateur obtient l'expérience insatisfaisante d'un bouton qui ne fait rien lorsqu'il est engagé. Donc, puis-je savoir s'il y a des applications enregistrées ou non qui acceptent l'ouverture d'un type de document spécifique? De toute évidence, les instances UIDocumentInteractionController peuvent le trouver. Existe-t-il un moyen API public de le découvrir?Comment dire (par programmation) s'il y a des applications enregistrées qui supportent l'ouverture d'un type de document spécifique?

Répondre

11

OK, plus de recherche révèle un utilisateur stackoverflow frenchkiss-dev a un solution - dérivé de lire les docs plus soigneusement que moi et une pensée latérale. Mon code ci-dessous, basé sur la réponse de frenchkiss-dev, se trouve dans une méthode ViewDidAppear et désactive mon bouton si l'ouverture puis la fermeture du menu de fichier ouvert (sans animation) révèle qu'il n'y a pas d'applications pouvant gérer l'ouverture du fichier. Le contexte de ce snippet est qu'un UIDocumentInteractionController a déjà été configuré dans viewDidLoad et est accessible via [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
//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]; 
    } 


} 
Questions connexes