Ich möchte den Betreff für das Teilen von E-Mails festlegen UIActivityViewController
und auch auf Twitter teilen. Ich weiß auf Twitter, ob wir teilen möchten - wir müssen Text auf 140 Zeichen komprimieren. Ich habe viele SO-Lösungen überprüft, aber nichts funktioniert.
Ist dieses Problem in den neuesten iOS-Versionen behoben? Irgendwelche anderen "funktionierenden Lösungen"?
Antworten:
Es scheint, als ob die Lösung von emreoktem - das Senden
setValue:forKey:
an dieUIActivityViewController
- nicht dokumentiert ist.Unter iOS 7 und höher können Sie die
activityViewController:subjectForActivityType:
Methode in einem Objekt implementieren, das demUIActivityItemSource
Protokoll entspricht, um dies auf dokumentierte Weise zu tun.quelle
activityViewController:subjectForActivityType:
ist die richtige Lösung. Seltsamerweise verwendet die iOS Mail-App den Betreff korrekt, aber Google Inbox verwendet die Nachricht auch für den Betreff (nicht den Betreff, der über bereitgestellt wirdsubjectForActivityType
)UIActivityViewController
Schuld, dass die Google Mail-App nicht funktioniertactivityViewController:subjectForActivityType:
.Überprüfen Sie den folgenden Code für die E-Mail, um Ihren E-Mail-Betreff einzurichten:
UIActivityViewController* avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"Your String to share"] applicationActivities:nil]; [avc setValue:@"Your email Subject" forKey:@"subject"]; avc.completionHandler = ^(NSString *activityType, BOOL completed) { // ... };
Hier die Linie
Legt den Betreff als "E-Mail-Betreff" fest, wenn der Benutzer die E-Mail-Option im UIActivityViewController auswählt.
Ich hoffe, es hilft...
quelle
Hier ist eine konkrete Lösung für Swift 3.0+ basierend auf der akzeptierten Antwort. Beachten Sie, dass dies wie die akzeptierte Antwort nur für die iOS Mail-App und nicht unbedingt für andere Apps funktioniert.
Implementierung:
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 } }
Verwendung:
Hier ist ein Anwendungsbeispiel. Beachten Sie, dass es gut funktioniert, dies als erstes Element im Array activityItems zu verwenden und alle folgenden zusätzlichen Elemente einzuschließen:
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)
quelle
Gmail
App, sondern nur fürios Mail app
. In Google Mail wird der Körper genauso angezeigt wie ein Betreff der NachrichtFür Swift 2.0+ und 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)
quelle