it-swarm.com.de

Wie setze ich einen Betreff in UIActivityViewController?

Ich möchte den Betreff für die E-Mail-Freigabe in UIActivityViewController festlegen und auch in Twitter freigeben. Ich weiß in 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.

Wurde dieses Problem in den neuesten iOS-Versionen behoben? Irgendwelche anderen "funktionierenden Lösungen"?

64
Femina

Es scheint, als ob die Lösung von emreoktem - das Senden von setValue:forKey: bis UIActivityViewController— ist nicht dokumentiert.

Unter iOS 7 und höher können Sie das activityViewController:subjectForActivityType: Methode in einem Objekt, das dem Protokoll UIActivityItemSource entspricht, um dies auf dokumentierte Weise durchzuführen.

86
Tim Camber

Überprüfen Sie den folgenden Code für die E-Mail zum Einrichten Ihres E-Mail-Betreffs:

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

[avc setValue: @ "Ihr E-Mail-Betreff" fürKey: @ "Betreff"];

Legt den Betreff als "Ihr E-Mail-Betreff" fest, wenn der Benutzer die E-Mail-Option im UIActivityViewController auswählt.

Ich hoffe, es hilft...

92
emreoktem

Für 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)
16
PAC

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 activityItems-Array 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)
10
biomiker