Вопрос

Когда я передаю строку, содержащую содержимое 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: если деятельность не UIActivityTypeMailnil если это так) — это остальная часть головоломки.

Я не рекомендую, чтобы один объект выполнял обе задачи, так как 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-строки - это тег.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top