Dixit Patel
Dixit Patel

Reputation: 205

UIActivityViewController is not working in iPad?

I want to show a popoverPresentationController when a user clicks on the share button. and I used action sheet for share button. here is my code it's not working on iPad:

    NSString *aText = @"Some Text";

    NSURL *aUrl = [NSURL URLWithString:@"www.demo.com"];

    NSArray *objectsToShare = @[aText,aUrl];
    NSArray * applicationActivities = nil;

    UIActivityViewController * activityViewController = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:applicationActivities];

    activityViewController.excludedActivityTypes = @[
                                                     UIActivityTypePostToWeibo,
                                                     UIActivityTypeAssignToContact,
                                                     UIActivityTypeAirDrop,
                                                     UIActivityTypeAddToReadingList,
                                                     UIActivityTypeCopyToPasteboard,
                                                     UIActivityTypeSaveToCameraRoll,
                                                     UIActivityTypePrint,
                                                     UIActivityTypePostToFlickr,
                                                     UIActivityTypePostToTencentWeibo,];

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self presentViewController:activityViewController animated:YES completion:nil];
    }
    else {

        UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
        [popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/4 + 20, 0, 0)inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

    }

It's wrong on iPad (nothing displayed on screen). So how can I solve it?

Upvotes: 1

Views: 762

Answers (1)

Dixit Patel
Dixit Patel

Reputation: 205

Yes, I got it and solve my issue.

On iPad the activity view controller will be displayed as a popover using the popoverPresentationController and use UIAlertController for show popup.

UIAlertController *actionSheet = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];

[actionSheet addAction:[UIAlertAction actionWithTitle:@"Share" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

NSString *aText = @"Some Text";

NSURL *aUrl = [NSURL URLWithString:@"www.demo.com"];

NSArray *objectsToShare = @[aText,aUrl];
NSArray * applicationActivities = nil;

UIActivityViewController * activityViewController = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:applicationActivities];

activityViewController.excludedActivityTypes = @[
                                                 UIActivityTypePostToWeibo,
                                                 UIActivityTypeAssignToContact,
                                                 UIActivityTypeAirDrop,
                                                 UIActivityTypeAddToReadingList,
                                                 UIActivityTypeCopyToPasteboard,
                                                 UIActivityTypeSaveToCameraRoll,
                                                 UIActivityTypePrint,
                                                 UIActivityTypePostToFlickr,
                                                 UIActivityTypePostToTencentWeibo,];

        UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:activityViewController];
        [popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.height/4 , 0, 0)inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];

    }]];

    actionSheet.popoverPresentationController.sourceView = self.view;
    actionSheet.popoverPresentationController.sourceRect = CGRectMake(self.view.frame.size.width, btn.frame.origin.y +btn.frame.size.height , 0, 0);
    actionSheet.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp;

    [self presentViewController:actionSheet animated:YES completion:nil];

Upvotes: 3

Related Questions