Pregunta

Cuando paso una cadena que contiene contenido HTML como un elemento de matriz al UIActivityViewController initWithActivityItems método, no lo presenta como HTML en el controlador 'compartir' seleccionado, sino que presenta la fuente HTML (es decir,el marcado en lugar de interpretarlo).

Y aunque puedo entender por qué haría esto para destinos compartidos que no admiten contenido html, tampoco lo interpretará para cosas como el correo electrónico, que sí lo hacen (anteriormente, esto se hacía configurando el isHTML propiedad a YES sobre el MFMailComposeController).

¿Debería perder el tiempo creando un UIActivityItemProvider que devuelve contenido personalizado basado en el 'tipo de actividad' o realmente no hay manera de que el controlador de correo sea presentado por el UIActivityViewController interpretar el contenido como HTML?

¿Fue útil?

Solución

¿Qué actividades buscas apoyar?Los tipos de actividad dependen del servicio y son bastante claramente definido.No hay forma de que los servicios sepan que una cadena es texto sin formato o texto marcado, por ejemplo; es posible que desee pegar código HTML a propósito.

Siempre puedes hacer las cosas a la antigua usanza y copiar texto plano y HTML al tablero, o llamar directamente al redactor del correo, o lo que sea que estés intentando lograr.

Otros consejos

En mis pruebas, si la cadena comienza con "<html><body>" y termina con "</body></html>", se trata como HTML.

Si desea obtener un buen resultado con los servicios para compartir que no son compatibles con HTML, debe utilizar un objeto que implemente el UIActivityItemFuente protocolo y devuelve la cadena HTML cuando desde -activityViewControllerPlaceholderItem: y de -activityViewController:itemForActivityType: si la actividad es UIActivityTypeMail y nil de lo contrario.

Un segundo UIActivityItemFuente que devuelve una cadena no HTML adecuada de -activityViewControllerPlaceholderItem: y de -activityViewController:itemForActivityType: si la actividad no es UIActivityTypeMail (y nil si es así) es el resto del rompecabezas.

Recomiendo no tener un objeto que haga ambos trabajos, ya que el UIActivity El motor tiene derecho a tomar diferentes decisiones en función de si el elemento del marcador de posición parece ser HTML o no.

No he probado ninguno de estos, pero me parecieron razonables para su objetivo cuando me familiaricé con UIActivityViewController.

1) Puede escribir la fuente HTML en un archivo local, por ejemplo, my_mail_message.html, luego construye un NSURL objeto con ese archivo, por ejemplo, [NSURL URLWithString:@"file://my_mail_message.html"], y luego usar eso NSURL objeto como elemento del activityItems matriz a la que alimentas initWithActivityItems:applicationActivities:.

2) Si conoce al destinatario previsto, por ejemplo, foo@example.com, posiblemente podrías construir un NSURL objeto con el mailto esquema y la fuente HTML como el body, al igual que: mailto:foo@example.com?body={my HTML source goes here}.Deberías omitir las llaves. {}.Como antes, entonces deberías usar eso. NSURL objeto como elemento del activityItems formación.

Espero que esto te dé algunas ideas.

Sólo necesitas asegurarte de que la primera línea de la cadena HTML sea una etiqueta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top