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