UIActivityViewController с HTML
Когда я передаю строку, содержащую содержимое HTML в качестве элемента массива, в метод UIActivityViewController initWithActivityItems
, он не представляет ее как HTML в выбранном контроллере общего доступа, а вместо этого представляет источник HTML (то есть разметку, а не интерпретацию она).
И хотя я могу понять, почему он будет делать это для целей общего доступа, которые не поддерживают html-контент, он не будет интерпретировать его для таких вещей, как электронная почта, которые делают (ранее это было бы сделано установкой isHTML
свойство YES
на MFMailComposeController
).
Должен ли я тратить время на создание UIActivityItemProvider
, который возвращает пользовательский контент на основе "типа активности", или нет способа получить почтовый контроллер, представленный UIActivityViewController
, для интерпретации содержимого как HTML?
Ответы
Ответ 1
Какие действия вы хотите поддержать? Виды активности зависят от службы, и они довольно четко определены. Нет возможности для служб знать, что строка представляет собой простой текст или помеченный текст, например - вы можете захотеть вставить HTML-код специально.
Вы всегда можете сделать что-то старомодным способом и скопировать обычный текст и HTML в картон, или напрямую вызвать почтовый композитор, или все, что вы пытаетесь выполнить.
Ответ 2
В моем тестировании, если строка начинается с "<html> <body> " и заканчивается "</body> </html> ", то она рассматривается как HTML.
Если вы хотите получить хороший результат с помощью служб обмена, отличных от HTML, вам нужно вместо этого использовать объект, который реализует UIActivityItemSource протокол и возвращает строку HTML, если она находится в -activityViewControllerPlaceholderItem:
и -activityViewController:itemForActivityType:
, если в противном случае это UIActivityTypeMail
и nil
.
Вторая UIActivityItemSource, которая возвращает подходящую строку, отличную от HTML, от -activityViewControllerPlaceholderItem:
и от -activityViewController:itemForActivityType:
, если эта активность не является UIActivityTypeMail
(и nil
, если это так) - это остальная часть головоломки.
Я рекомендую против того, чтобы один объект выполнял оба задания, так как движок UIActivity
имеет право принимать различные решения на основе того, является ли элемент-заполнитель HTML-кодом или нет.
Ответ 3
Я не пробовал ни одного из них, но они казались разумными для вашей цели, когда я узнал о UIActivityViewController.
1) Вы можете написать источник HTML в локальный файл, например my_mail_message.html
, а затем создать объект NSURL
с этим файлом, например, [NSURL URLWithString:@"file://my_mail_message.html"]
, а затем использовать этот объект NSURL
как элемент массива activityItems
, который вы передаете в initWithActivityItems:applicationActivities:
.
2) Если вы знаете предполагаемого получателя, например [email protected]
, вы могли бы построить объект NSURL
с помощью схемы mailto
и источника HTML как body
, например: mailto:[email protected]?body={my HTML source goes here}
.
Вы должны опустить фигурные скобки {}
. Как и раньше, вы должны использовать этот объект NSURL
как элемент массива activityItems
.
Надеюсь, это даст вам некоторые идеи.
Ответ 4
Вам просто нужно убедиться, что первая строка строки HTML является тегом.