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

Fem*_*ina 65 email objective-c subject ios uiactivityviewcontroller

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

最新的iOS版本是否修复了此问题?还有其他"工作方案"吗?

emr*_*tem 94

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

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

avc.completionHandler = ^(NSString *activityType, BOOL completed) {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

在这里

[avc setValue:@"您的电子邮件主题"forKey:@"subject"];

如果用户在UIActivityViewController中选择电子邮件选项,则将主题设置为"您的电子邮件主题".

我希望它有所帮助......

  • 这似乎不适用于iOS8,还有另一种方法吗? (3认同)
  • 但是当我打开 Gmail 应用程序时没有显示电子邮件主题。我在 Gmail 主题部分收到正文内容 (2认同)

Tim*_*ber 87

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

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

  • 是的,`activityViewController:subjectForActivityType:`是正确的解决方案.奇怪的是,iOS Mail应用程序正确使用主题**但Google Inbox**也使用该主题的消息(不是通过`subjectForActivityType`提供的主题) (7认同)
  • @LeslieGodwin您是否找到了通过Gmail共享的任何解决方案? (3认同)

PAC*_*PAC 18

适用于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)
Run Code Online (Sandbox Code Playgroud)


bio*_*ker 13

这是基于接受的答案的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
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

这是一个使用示例.请注意,将其用作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)
Run Code Online (Sandbox Code Playgroud)