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