I am using UIActivityViewController for sharing information through email. We are able to send email with body, attachments with no problem. But how do we set the subject title for the email.
I notice this question: How to set a mail Subject in UIActivityViewController?
The accepted solution is using UIActivityItemSource with this following API activityViewController:subjectForActivityType:. However, our code doesn't conform to UIActivityItemSource because we are using UIActivityItemProvider.
UIActivityItemSource
You can use this protocol in situations where you want to provide the data from one of your app’s existing objects instead of creating a separate UIActivityItemProvider object.
So the complete question is:
How do I set the email subject if I am using UIActivityItemProvider instead of UIActivityItemSource?
Define your custom item provider:
@interface CustomProvider : UIActivityItemProvider
@end
Add to your implementation:
@implementation CustomProvider
// Some other code ... -(id)item and etc.
- (NSString *) activityViewController:(UIActivityViewController *)activityViewController
subjectForActivityType:(NSString *)activityType
{
return @"A dummy Title";
}
@end
Notice that UIActivityItemProvider will automatically conform to UIactivityItemSource protocol. The difference is, you don't have to implement those @required API for UIactivityItemSource protocol.
Just add this line after you instantiate your UIActivityViewController:
[activityController setValue:@"Your email Subject" forKey:@"subject"];
I am using it like this:
- (void)share {
NSArray *activityItems;
NSString *texttoshare = [NSString stringWithFormat:@"Hey bro! check this info.\n%@\n%@", self.infoBean.title, self.infoBean.desc];
UIImage *imagetoshare = imageView.image;//this is your image to share
if (imagetoshare != nil) {
activityItems = @[imagetoshare, texttoshare];
} else {
activityItems = @[texttoshare];
}
NSArray *exTypes = @[UIActivityTypeAssignToContact, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeSaveToCameraRoll];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
activityController.excludedActivityTypes = exTypes;
[activityController setValue:@"Your email Subject" forKey:@"subject"];
[self presentViewController:activityController animated:YES completion:nil];
}
UIActivityItemProvider implements the UIActivityItemSource protocol. It's right there in the header.
@interface UIActivityItemProvider : NSOperation <UIActivityItemSource>
so you can simply use the method - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType to return the subject in your UIActivityItemProvider subclass.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With