在Swift中使用UIActivityViewController分享邮件时如何添加主题

8

我使用UIActivityViewController来分享数据。

我的代码:

dispatch_async(dispatch_get_main_queue()) { () -> Void in
    let activityViewController : UIActivityViewController = UIActivityViewController(
        activityItems: [text!], applicationActivities: nil)
    // This line remove the arrow of the popover to show in iPad
    activityViewController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection()
    activityViewController.popoverPresentationController?.sourceRect = CGRect(x: 150, y: 150, width: 0, height: 0)
    
    // Anything you want to exclude
    activityViewController.excludedActivityTypes = [
        UIActivityTypePostToWeibo,
        UIActivityTypePrint,
        UIActivityTypeAssignToContact,
        UIActivityTypeSaveToCameraRoll,
        UIActivityTypeAddToReadingList,
        UIActivityTypePostToFlickr,
        UIActivityTypePostToVimeo,
        UIActivityTypePostToTencentWeibo
    ]
    
    self.presentViewController(activityViewController, animated: true, completion: nil)            
}

我可以显示短信、电子邮件和笔记,并且我可以在短信、电子邮件和笔记中添加正文。但是我有一个关于电子邮件的问题:我只能添加电子邮件的正文,但我也想添加电子邮件的主题。我该怎么做?

4个回答

17

只需像这样将主题的值设置为您的标题:

activityViewController.setValue("This is my title", forKey: "Subject")

4
似乎不再起作用了,至少在分享到 MS Outlook 时是这样。 - jhelzer
这仅适用于iPhone Mail。对于gmail不起作用。 - Rohit Singh

2

使用以下代码将主题添加到邮件中,但这仅会在默认的iOS邮件中添加主题,而不是在Google邮件中。

原始答案:Original Answer

let string : String = "Hello this is content to Body of my mail."

let activityViewController = UIActivityViewController(activityItems: [string], applicationActivities: nil)

activityViewController.setValue("Subject Title",forkey "subject")

// This line of code will support alertcontroller as popover for iPAd also.                   
 if let popoverController = activityViewController.popoverPresentationController {
           popoverController.sourceView = super.view  
}

navigationController?.present(activityViewController, animated: true){
                 }

2

试试这个:

let obj = UIActivityViewController(activityItems: [Text], applicationActivities: [])
  
obj.setValue("Your Subject", forKey: "Subject")

3
请始终将您的回答放在上下文中,而不仅仅是粘贴代码。更多详情请参见这里 - gehbiszumeis

0

由于“setValue forkey”解决方案仅适用于特定上下文(即在macCatalyst下不起作用),因此这里提供了一个对我有效的解决方案:

class EmailSubjectActivityItemSource: NSObject, UIActivityItemSource {
var subject: String
var emailBody: String

init(subject: String, emailBody: String) {
    self.subject = subject
    self.emailBody = emailBody
}

func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
    return emailBody
}

func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
    
    if activityType == UIActivity.ActivityType.mail {
        return emailBody
    }
    return subject+"\n"+emailBody
}

func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
    if activityType == UIActivity.ActivityType.mail {
        return subject
    }
    return ""
}

}

如何使用它?

let emailTextAndSubject = EmailSubjectActivityItemSource(subject:"mysubject", emailBody:"myemailBody")
let activityViewController = UIActivityViewController(
        activityItems: [emailTextAndSubject, WhateverAttachmentFileURL],
           applicationActivities: nil)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接