Подтвердить что ты не робот

UIActivityViewController с HTML

Когда я передаю строку, содержащую содержимое HTML в качестве элемента массива, в метод UIActivityViewController initWithActivityItems, он не представляет ее как HTML в выбранном контроллере общего доступа, а вместо этого представляет источник HTML (то есть разметку, а не интерпретацию она).

И хотя я могу понять, почему он будет делать это для целей общего доступа, которые не поддерживают html-контент, он не будет интерпретировать его для таких вещей, как электронная почта, которые делают (ранее это было бы сделано установкой isHTML свойство YES на MFMailComposeController).

Должен ли я тратить время на создание UIActivityItemProvider, который возвращает пользовательский контент на основе "типа активности", или нет способа получить почтовый контроллер, представленный UIActivityViewController, для интерпретации содержимого как HTML?

4b9b3361

Ответ 1

Какие действия вы хотите поддержать? Виды активности зависят от службы, и они довольно четко определены. Нет возможности для служб знать, что строка представляет собой простой текст или помеченный текст, например - вы можете захотеть вставить HTML-код специально.

Вы всегда можете сделать что-то старомодным способом и скопировать обычный текст и HTML в картон, или напрямую вызвать почтовый композитор, или все, что вы пытаетесь выполнить.

Ответ 2

В моем тестировании, если строка начинается с "<html> <body> " и заканчивается "</body> </html> ", то она рассматривается как HTML.

Если вы хотите получить хороший результат с помощью служб обмена, отличных от HTML, вам нужно вместо этого использовать объект, который реализует UIActivityItemSource протокол и возвращает строку HTML, если она находится в -activityViewControllerPlaceholderItem: и -activityViewController:itemForActivityType:, если в противном случае это UIActivityTypeMail и nil.

Вторая UIActivityItemSource, которая возвращает подходящую строку, отличную от HTML, от -activityViewControllerPlaceholderItem: и от -activityViewController:itemForActivityType:, если эта активность не является UIActivityTypeMailnil, если это так) - это остальная часть головоломки.

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