73

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

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

4

4 回答 4

95

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

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:@"主题"];

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

我希望它有帮助...

于 2013-09-01T22:38:18.670 回答
94

似乎 emreoktem 的解决方案(发送setValue:forKey:到该解决方案)没有记录在案UIActivityViewController

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

于 2013-10-09T18:31:10.817 回答
28

这是基于公认答案的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)
于 2018-03-21T18:19:14.377 回答
19

对于 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)
于 2016-03-28T09:02:47.180 回答