How to set a mail Subject in UIActivityViewController? How to set a mail Subject in UIActivityViewController? ios ios

How to set a mail Subject in UIActivityViewController?


Check below code for the email for setting up your email subject:

UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"]                                  applicationActivities:nil];[avc setValue:@"Your email Subject" forKey:@"subject"];avc.completionHandler = ^(NSString *activityType, BOOL completed) {    // ...};

Here the line

[avc setValue:@"Your email Subject" forKey:@"subject"];

Makes the subject as "Your email Subject" if user picks email option in the UIActivityViewController.

I hope it helps...


It seems as though emreoktem's solution—sending setValue:forKey: to the UIActivityViewController—is undocumented.

On iOS 7 and later, you can implement the activityViewController:subjectForActivityType: method in an object conforming to the UIActivityItemSource protocol to do this in a way that is documented.


Here's a concrete solution for Swift 3.0+ based on the accepted answer. Note that, like the accepted answer, this is known to work only on the iOS Mail app and not necessarily other apps.

Implementation:

class MessageWithSubject: NSObject, UIActivityItemSource {    let subject:String    let message:String    init(subject: String, message: String) {        self.subject = subject        self.message = message        super.init()    }    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {        return message    }    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {        return message    }    func activityViewController(_ activityViewController: UIActivityViewController,                                subjectForActivityType activityType: UIActivityType?) -> String {        return subject    }}

Usage:

Here's an example of usage. Note that it works well to use this as the first item in the activityItems array, and include any additional items to follow:

let message = MessageWithSubject(subject: "Here is the subject", message: "An introductory message")let itemsToShare:[Any] = [ message, image, url, etc ]let controller = UIActivityViewController(activityItems: itemsToShare, applicationActivities: nil)