UIActivityViewController & UIDocumentInteractionController not showing options

后端 未结 4 2138
青春惊慌失措
青春惊慌失措 2021-02-08 09:01

I am new to UIActivityViewController and perhaps I am missing a basic understanding. What I am trying to do is attached a csv, xml and vcard file to activity controller and show

相关标签:
4条回答
  • 2021-02-08 09:20

    As @rmaddy said, you should use UIDocumentInteractionController to replace UIActivityViewController, just like this:

    UIDocumentInteractionController *dc = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileNameStr]];
    [dc presentOptionsMenuFromRect:self.view.bounds inView:self.view animated:YES];
    
    0 讨论(0)
  • 2021-02-08 09:32

    UIActivityViewController only shows standard built-in activities plus any custom activities you pass as applicationActivities.

    For what you are doing, you don't want UIActivityViewController. You want a UIDocumentInteractionController. If you just want to display existing apps that can open the file, use one of the presentOpenInMenuFrom... methods.

    But note that is to be used for just a single file, not three.

    Passing three files makes no sense in this context.

    0 讨论(0)
  • 2021-02-08 09:40

    For anyone interested in future, here's the code all in one place. Do rate it up if this helps.

    In your *.h file add this

    @interface v1BackupComplete : UIViewController <UIDocumentInteractionControllerDelegate>
    {
    
        UIDocumentInteractionController *docController;
    
    }
    

    In your *.m file add this

    /************************
     * Dropbox ACTION
     ************************/
    -(IBAction) dropBoxAction2
    {
        NSLog(@"dropBoxAction2 ...");
    
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
        NSString* documentsPath = [paths objectAtIndex:0];
        NSMutableString *fileNameStr3 = [NSMutableString stringWithFormat:@"test_VCARD_Backup.vcf"];
        NSString* vcardDataFileStr = [documentsPath stringByAppendingPathComponent:fileNameStr3];
    
    
        NSURL *fileURL = [NSURL fileURLWithPath:vcardDataFileStr];
        docController = [self setupControllerWithURL:fileURL
                                       usingDelegate:self];
    
        bool didShow = [docController presentOpenInMenuFromRect:self.view.bounds inView:self.view animated:YES];
    
        NSLog(@"didShow %d ...", didShow);
    
        if (!didShow)
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ERROR"
                                                            message:@"Sorry. The appropriate apps are not found on this device."
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles: nil];
            [alert show];
        }
    }
    
    
    #pragma mark - UIDocumentInteractionControllerDelegate
    - (UIDocumentInteractionController *) setupControllerWithURL:(NSURL *)fileURL
                                                   usingDelegate:(id <UIDocumentInteractionControllerDelegate>)         interactionDelegate {
    
        UIDocumentInteractionController *interactionController =
        [UIDocumentInteractionController interactionControllerWithURL:fileURL];
        interactionController.delegate = interactionDelegate;
    
        return interactionController;
    }
    
    - (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
    {
        return self;
    }
    
    - (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller
    {
        return self.view;
    }
    
    - (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller
    {
        return self.view.frame;
    }
    
    0 讨论(0)
  • 2021-02-08 09:40

    I have used your code here to open with dropbox and only after I have used presentPreview method (bellow) It was worked for me. The pdf was shown as preview and then on the preview share button click (top right) the dropbox option ("open in dropbox") did the job. As it works in the mail app in the attachment preview.

    [interactionController presentPreviewAnimated:YES];
    

    When i tried to open with presentOpenInMenuFromRect it was crashed on selecting "open in dropbox".

    0 讨论(0)
提交回复
热议问题