Je souhaite définir le sujet du partage des e-mails dans UIActivityViewController
et je souhaite également partager sur Twitter. Je sais sur Twitter si nous voulons partager - nous avons besoin de compresser le texte à 140 caractères. J'ai vérifié de nombreuses solutions SO, mais rien ne fonctionne.
Ce problème est-il résolu dans les dernières versions d'iOS? D'autres "solutions de travail"?
Il semble que la solution d'emreoktem: envoyer setValue:forKey:
au UIActivityViewController
— n'est pas documenté.
Sur iOS 7 et versions ultérieures, vous pouvez implémenter le activityViewController:subjectForActivityType:
méthode dans un objet conforme au protocole UIActivityItemSource
pour le faire d'une manière documentée.
Vérifiez ci-dessous le code de l'e-mail pour configurer votre objet de messagerie:
UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"]
applicationActivities:nil];
[avc setValue:@"Your email Subject" forKey:@"subject"];
avc.completionHandler = ^(NSString *activityType, BOOL completed) {
// ...
};
Voici la ligne
[avc setValue: @ "Votre e-mail Objet" forKey: @ "subject"];
Transforme le sujet en "Sujet de votre e-mail" si l'utilisateur choisit l'option e-mail dans UIActivityViewController.
J'espère que ça aide ...
Pour 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)
Voici une solution concrète pour Swift 3.0 + basée sur la réponse acceptée. Notez que, comme la réponse acceptée, cela est connu pour fonctionner uniquement sur l'application iOS Mail et pas nécessairement sur d'autres applications.
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
}
}
Voici un exemple d'utilisation. Notez que cela fonctionne bien pour l'utiliser comme premier élément du tableau activityItems et inclure tous les éléments supplémentaires à suivre:
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)