Question

Lorsque je transmets une chaîne contenant du contenu HTML en tant qu'élément de tableau au UIActivityViewController initWithActivityItems méthode, il ne le présente pas au format HTML dans le contrôleur « partage » sélectionné, mais présente à la place la source HTML (c'est-à-direle balisage plutôt que de l’interpréter).

Et bien que je puisse comprendre pourquoi il ferait cela pour les cibles de partage qui ne prennent pas en charge le contenu HTML, il ne l'interprétera pas non plus pour des choses comme le courrier électronique, qui le font (auparavant, cela se faisait en définissant le isHTML propriété à YES sur le MFMailComposeController).

Dois-je perdre mon temps à créer un UIActivityItemProvider qui renvoie un contenu personnalisé basé sur le « type d'activité » ou n'y a-t-il vraiment aucun moyen d'obtenir le contrôleur de messagerie présenté par le UIActivityViewController interpréter le contenu au format HTML ?

Était-ce utile?

La solution

Quelles activités cherchez-vous à soutenir ?Les types d'activités dépendent du service et ils sont jolis clairement défini.Les services n'ont aucun moyen de savoir qu'une chaîne est du texte brut ou du texte balisé, par exemple : vous souhaiterez peut-être coller du code HTML volontairement.

Vous pouvez toujours faire les choses à l'ancienne et copier du texte brut et du HTML dans le presse-papiers, ou appeler directement le compositeur de courrier, ou tout ce que vous essayez d'accomplir.

Autres conseils

Lors de mes tests, si la chaîne commence par "<html><body>" et se termine par "</body></html>", elle est traitée comme du HTML.

Si vous souhaitez un bon résultat avec les services de partage non compatibles HTML, vous devez plutôt utiliser un objet qui implémente le UIActivityItemSource protocole et renvoie la chaîne HTML à partir de -activityViewControllerPlaceholderItem: et de -activityViewController:itemForActivityType: si l'activité est UIActivityTypeMail et nil sinon.

Une seconde UIActivityItemSource qui renvoie une chaîne non HTML appropriée à partir de -activityViewControllerPlaceholderItem: et de -activityViewController:itemForActivityType: si l'activité n'est pas UIActivityTypeMail (et nil si c'est le cas), c'est le reste du puzzle.

Je déconseille qu'un seul objet fasse les deux tâches, car le UIActivity Le moteur est autorisé à prendre des décisions différentes selon que l'élément d'espace réservé semble être HTML ou non.

Je n'ai essayé aucun de ces éléments, mais ils semblaient raisonnables pour votre objectif lorsque je me familiarisais avec UIActivityViewController.

1) Vous pouvez écrire la source HTML dans un fichier local, par exemple : my_mail_message.html, puis construisez un NSURL objet avec ce fichier, par exemple, [NSURL URLWithString:@"file://my_mail_message.html"], puis utilisez-le NSURL objet en tant qu'élément du activityItems tableau auquel vous alimentez initWithActivityItems:applicationActivities:.

2) Si vous connaissez le destinataire prévu, par ex. foo@example.com, vous pourriez éventuellement construire un NSURL objet avec le mailto schéma et la source HTML comme body, ainsi: mailto:foo@example.com?body={my HTML source goes here}.Vous devriez omettre les accolades {}.Comme auparavant, vous devriez alors l'utiliser NSURL objet en tant qu'élément du activityItems tableau.

J'espère que cela vous donne quelques idées.

Vous devez simplement vous assurer que la première ligne de la chaîne HTML est une balise.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top