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


69

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

最新的iOS版本中已解决此问题吗?还有其他“可行的解决方案”吗?


不,它不是。请检查以下我的评论,让我知道我是否错过正确的方法。谢谢
Femina

Answers:


90

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

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


8
是的,activityViewController:subjectForActivityType:是正确的解决方案。奇怪的是,iOS Mail应用程序正确使用了该主题,但Google Inbox也使用该主题的消息(不是通过提供的主题subjectForActivityType
Leslie Godwin 2015年

3
@LeslieGodwin您是否找到任何可通过gmail共享的解决方案?
Zalak Patel

@TimCamber尽管我已经尝试了上述方法,但通过gmail共享仍然显示问题。请帮助解决
Zalak Patel

@jalakpatel我不确定您在问什么。您是否正在与Google Gmail应用共享内容?在这种情况下,UIActivityViewControllerGmail应用未启动可能并非错误activityViewController:subjectForActivityType:
蒂姆·阿诺德

谢谢,这是正确的答案。我为Swift 3+的一个具体类添加了一个答案,我发现它非常有用。
biomiker

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) {
    // ...
};

这条线

[avc setValue:@“您的电子邮件主题”为键:@“主题”];

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

希望对您有帮助...


1
[activityVC setCompletionHandler:^(NSString * activityType,BOOL已完成){if([[activityType isEqualToString:UIActivityTypeMail]){NSLog(@“已选择邮件类型”); [activityVC setValue:@“ Share!” forKey:@“ subject”]; }}]; 它不起作用emreoktem!
Femina 2013年

@Meenu您应该在完成处理程序之前设置主题。
colinta 2014年

3
这似乎在iOS8中不起作用,还有另一种方法吗?
svarrall 2014年

1
这和activityViewController:subjectForActivityType:烦人地将电子邮件主题和导航栏标题设置为同一字符串。有一个正式的有据可查的方式来做到这一点会很好。
克劳斯

2
但是当我打开gmail application时,电子邮件主题未显示。我在Gmail主题部分中获得了正文内容
Ansal Antony

23

这是基于公认答案的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)

1
以下解决方案不适用于Gmail应用程序,而仅适用于ios Mail app。Gmail上主体被示出的相同的消息主题
半乳糖的Bracha

没错,Gal就像接受的答案一样。我添加了一条评论,使之更加明确。
biomiker

1
班级名称应以大写字母开头。
user2878850

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)

共享网站链接是否有用?例如[标题,内容,链接],还是URL必须是内容本身的一部分,并让电子邮件客户端对其进行解析并使其可单击?
gadget00 '16

根据公认的答案,这是无证且不可靠的。
biomiker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.