Frage

Wenn ich eine Zeichenfolge mit HTML-Inhalt als Array-Element an die übergebe UIActivityViewController initWithActivityItems -Methode wird es im ausgewählten „Share“-Controller nicht als HTML dargestellt, sondern stattdessen als HTML-Quelle (d. h.das Markup, anstatt es zu interpretieren).

Und obwohl ich verstehen kann, warum dies für Freigabeziele geschieht, die keine HTML-Inhalte unterstützen, wird es auch nicht für Dinge wie E-Mails interpretiert, die dies tun (zuvor wurde dies durch Festlegen von getan). isHTML Eigentum zu YES auf der MFMailComposeController).

Sollte ich meine Zeit damit verschwenden, eine zu erstellen? UIActivityItemProvider Das gibt benutzerdefinierten Inhalt basierend auf dem „Aktivitätstyp“ zurück oder gibt es wirklich keine Möglichkeit, den Mail-Controller vom anzuzeigen UIActivityViewController den Inhalt als HTML interpretieren?

War es hilfreich?

Lösung

Welche Aktivitäten möchten Sie unterstützen?Aktivitätstypen hängen vom Dienst ab und sind hübsch klar definiert.Dienste können beispielsweise nicht erkennen, ob es sich bei einer Zeichenfolge um einfachen Text oder markierten Text handelt. Möglicherweise möchten Sie absichtlich HTML-Code einfügen.

Sie können die Dinge immer auf die altmodische Art und Weise erledigen und reinen Text und HTML in die Zwischenablage kopieren oder den Mail-Composer direkt aufrufen oder was auch immer Sie erreichen möchten.

Andere Tipps

Wenn in meinen Tests die Zeichenfolge mit „<html><body>“ beginnt und mit „</body></html>“ endet, wird sie als HTML behandelt.

Wenn Sie mit den nicht HTML-fähigen Sharing-Diensten ein gutes Ergebnis erzielen möchten, müssen Sie stattdessen ein Objekt verwenden, das das implementiert UIActivityItemSource Protokoll und gibt die HTML-Zeichenfolge zurück, wenn von -activityViewControllerPlaceholderItem: und von -activityViewController:itemForActivityType: wenn die Aktivität ist UIActivityTypeMail Und nil ansonsten.

Eine Sekunde UIActivityItemSource das eine geeignete Nicht-HTML-Zeichenfolge zurückgibt -activityViewControllerPlaceholderItem: und von -activityViewController:itemForActivityType: wenn die Aktivität nicht ist UIActivityTypeMail (Und nil (falls ja) ist der Rest des Rätsels.

Ich rate davon ab, ein Objekt beide Aufgaben erledigen zu lassen, da das UIActivity Die Engine ist berechtigt, unterschiedliche Entscheidungen zu treffen, je nachdem, ob das Platzhalterelement als HTML erscheint oder nicht.

Ich habe keines davon ausprobiert, aber sie schienen für Ihr Ziel angemessen zu sein, als ich mich mit UIActivityViewController vertraut machte.

1) Sie könnten die HTML-Quelle in eine lokale Datei schreiben, z. B. my_mail_message.html, dann erstellen Sie eine NSURL Objekt mit dieser Datei, z. B. [NSURL URLWithString:@"file://my_mail_message.html"], und dann verwenden Sie das NSURL Objekt als Element des activityItems Array, das Sie füttern initWithActivityItems:applicationActivities:.

2) Wenn Sie den beabsichtigten Empfänger kennen, z. B. foo@example.com, könnten Sie möglicherweise eine bauen NSURL Objekt mit dem mailto Schema und die HTML-Quelle als body, etwa so: mailto:foo@example.com?body={my HTML source goes here}.Die geschweiften Klammern sollten Sie weglassen {}.Das sollten Sie dann wie bisher nutzen NSURL Objekt als Element des activityItems Array.

Ich hoffe, das gibt Ihnen einige Ideen.

Sie müssen lediglich sicherstellen, dass die erste Zeile der HTML-Zeichenfolge ein Tag ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top