如何在 UIActivityViewController 中设置邮件主题?

我想在 UIActivityViewController中设置电子邮件分享的主题,也想在 Twitter 中分享。我知道如果我们想在 Twitter 上分享,我们需要将文本压缩到140个字符。我检查了许多 SO 解决方案,但没有一个是有效的。

这个问题在最新的 iOS 版本中得到解决了吗? 还有其他“可行的解决方案”吗?

40468 次浏览

查看下面的代码来设置您的电子邮件主题:

UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"]
applicationActivities:nil];
[avc setValue:@"Your email Subject" forKey:@"subject"];


avc.completionHandler = ^(NSString *activityType, BOOL completed) {
// ...
};

这里的线

[ avc setValue:@“ Your email Subject”forKey:@“ Subject”] ;

如果用户在 UIActivityViewController 中选择 email 选项,则将主题作为“ Your email Subject”。

我希望这能帮上忙。

似乎 emreoktem 的解决方案ーー将 setValue:forKey:发送到 UIActivityViewControllerーー没有文档记录。

在 iOS7和更高版本中,您可以在符合 UIActivityItemSource协议的对象中实现 activityViewController:subjectForActivityType:方法,以文档化的方式来实现。

对于 Swift 2.0 + & ios 8.0 +

let title = "Title of the post"
let content = "Content of the post"
let objectsToShare = [title, content]


let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityVC.setValue(title, forKey: "Subject")
self.presentViewController(activityVC, animated: true, completion: nil)

以下是基于公认答案的 Swift 3.0 + 的具体解决方案。注意,就像公认的答案一样,我们知道这只适用于 iOS 邮件应用程序,而不一定适用于其他应用程序。

实施方法:

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
}
}

用法:

这里有一个用法的例子。请注意,将它作为 activityItems 数组中的第一个项目,并包含任何其他项目,这样做效果很好:

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)