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

时间:2013-06-10 09:02:57

标签: ios objective-c email uiactivityviewcontroller subject

我想在UIActivityViewController中设置电子邮件共享主题,并希望在Twitter上分享。我知道在Twitter上我们想分享 - 我们需要将文本压缩到140个字符。我检查了许多SO解决方案,但没有任何工作。

此问题是否已在最新的iOS版本中修复?还有其他“工作方案”吗?

4 个答案:

答案 0 :(得分:91)

检查以下代码,了解设置电子邮件主题的电子邮件:

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:@“您的电子邮件主题”forKey:@“subject”];

如果用户在UIActivityViewController中选择电子邮件选项,则将主题设为“您的电子邮件主题”。

我希望它有所帮助...

答案 1 :(得分:85)

似乎emreoktem的解决方案 - 向setValue:forKey:发送UIActivityViewController - 没有记录。

在iOS 7及更高版本中,您可以在符合activityViewController:subjectForActivityType:协议的对象中实现UIActivityItemSource方法,以便以记录的方式执行此操作。

答案 2 :(得分:14)

对于Swift 2.0+& ios 8.0 +

this.num

答案 3 :(得分:9)

根据接受的答案,这里是 Swift 3.0 + 的具体解决方案。请注意,与已接受的答案一样,众所周知,这只适用于iOS Mail应用,而不一定适用于其他应用。

实现:

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)