скопировать HTML в UIPasteboard

Я хочу перенести HTML из моего приложения в почтовое приложение iPhone. У меня уже есть текст HTML - чтобы не сказать, что span style = 'color: red'> Test / span> Я могу поместить его в UIPasteBoard, но когда я вставляю его в почту, я получаю исходный код html.

Когда я помещаю ту же строку в HTMLView - выбираю ее там и копирую, она вставляется как красный текст в почту.

Что мне нужно сделать, чтобы поместить строку в UIPasteBoard, чтобы она вставлялась как красный текст в почтовое приложение? Я искал «типы формата» - и обнаружил, что UIPasteBoard возвращает «тип монтажной панели веб-архива Aplle», когда у меня есть элемент (скопированный из UIWebView) в буфере обмена. Но установка этого типа при добавлении содержимого в UIPasteBoard ничего не вставляет в почтовое приложение.

Манфред


person ManniAT    schedule 13.03.2010    source источник


Ответы (5)


Нет, не может. UIPasterBoard принимает только строки, изображения, URL-адреса и цвета.

person F'x    schedule 15.03.2010
comment
Боялся, что кто-нибудь это скажет :) Спасибо - person ManniAT; 16.03.2010
comment
Хотя этот ответ отмечен как правильный, как указано ниже, вы можете скопировать HTML на UIPasteBoard. См. Ответ maxpower ниже. Короткий фрагмент кода для вставки HTML из вашего приложения в почтовое приложение iOS см. На странице stackoverflow.com/q/6566152/531205 - person Obliquely; 04.07.2011
comment
Совершенно неверно! Даже в справочнике UIPasteBoard говорится, что вы можете размещать свои собственные типы файлов на доске для вставки. - person Akshay; 29.09.2011
comment
Определенно неправда, проверьте ссылку, которую опубликовал Мэтью. Я сделал красный текст этим же методом всего несколько минут назад в качестве теста для чего-то еще. Он вставляется в почту как HTML. - person Peter Johnson; 20.12.2012

Это неправда. вы можете наклеить на картон ВСЕ, иди читайте документацию.

Я наконец-то собрал руководство, в котором показано, как копировать HTML в приложение Mail. http://mcmurrym.wordpress.com/2010/08/13/pasting-simplehtml-into-the-mail-app-ios/

person maxpower    schedule 22.07.2010
comment
Не могли бы вы сказать мне, где в документах 3.x UIPasteBoard можно найти эти другие (НИЧЕГО)? Я последовал вашему дружескому предложению и прочитал документы: developer.apple.com/iphone/library/documentation/uikit/ Может быть, мне стоит прочитать другие документы - просто скажите мне, где они. - person ManniAT; 02.08.2010

У меня работает HTML-копия, поэтому она правильно вставляется во встроенные приложения Mail и Notes. Это выглядит так:

NSString *htmlContent = @"This is <span style='font-weight:bold'>HTML</span>";
NSString *content = @"This is HTML!";
NSDictionary *dict = @{(NSString *)kUTTypeText: content, (NSString *)kUTTypeHTML: htmlContent};
[[UIPasteboard generalPasteboard] setItems:@[dict]];

Чтобы получить доступ к этим константам типа, вам необходимо импортировать это:

#import <MobileCoreServices/UTCoreTypes.h>
person Tom Hamming    schedule 14.11.2014

по той же ссылке, которую вы указали в своем комментарии, вы найдете этот абзац вверху.

Универсальный идентификатор типа (UTI) часто используется для типа представления (иногда называемого типом монтажного стола). Например, вы можете использовать kUTTypeJPEG (константа для public.jpeg) в качестве типа представления для данных JPEG. Однако приложения могут использовать любую строку в качестве типа представления; однако для типов данных, зависящих от приложения, рекомендуется использовать нотацию обратного DNS, чтобы гарантировать уникальность типа (например, com.myCompany.myApp.myType).

Прямо под ним ссылка сюда. http://developer.apple.com/iphone/library/documentation/FileManagement/Conceptual/understanding_utis/understand_utis_intro/understand_utis_intro.html#//apple_ref/doc/uid/TP40001319.

Это объясняет ИМП.

Наконец, эта ссылка дает вам НЕСКОЛЬКО типов http://developer.apple.com/iphone/library/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

Конечно, этот список не ВСЕ типы, так как вы можете создавать свои собственные типы.

Я успешно вставил HTML в почтовое приложение. Я дам вам хорошее место для начала ...

Создайте приложение, которое будет отображать типы данных на монтажном столе. Перейти в сафари на устройстве, скопировать веб-страницу. Запустите приложение. Вы заметите, что тип монтажного стола - «Тип монтажного стола Apple Web Archive». Обратите внимание, что это действительно тип картона (нестандартный). Если вы попытаетесь продублировать мобильную функцию копирования и вставки Safari самостоятельно, создав веб-архив и попытавшись вставить его как текст в почтовое приложение, он покажет файл веб-архива как необработанный xml. Если вы определите тип как «Тип монтажного стола Apple Web Archive», почтовое приложение фактически отформатирует вставку как html.

Если вы хотите знать, как выглядит веб-архив. В настольном сафари просто сохраните веб-страницу в виде архива и просмотрите файл в текстовом средстве чтения (текстовый редактор попытается проанализировать его, поэтому вы можете использовать другую программу для просмотра архива xml).

Пожалуйста, прочтите всю документацию, так как вы можете обнаружить, что вы можете использовать пользовательские типы по ссылке, которую вы мне прислали.

person maxpower    schedule 02.08.2010
comment
Проблема в том (на iPhone, а не на настольном компьютере), - как я уже писал в начальном вопросе, - что, когда я устанавливаю тип (например) на монтажный стол Apple Web Archive, в электронное письмо ничего не вставляется. Я также нашел расширение для UTI, но я не смог заставить его работать и не нашел примера в Интернете. Все, что я нашел (что также было первым ответом здесь), это то, что только на iPhone ... доступны. - person ManniAT; 03.08.2010
comment
Ах, и между прочим (извините, что я забыл) спасибо за ваши усилия. Если бы вы могли предоставить ссылку на какой-нибудь рабочий образец, это было бы здорово. - person ManniAT; 03.08.2010
comment
Мое решение для iphone / ipad. Я посмотрю, смогу ли я создать пример. Проблема, с которой вы столкнулись, заключается в том, что строка, связанная с типом для Apple Web Arc ...., заключается в том, что она не может быть простой строкой. Это довольно сложный процесс. Вам нужно создать XML-документ / строку, а фактическое содержимое html внутри закодировано в base64. Не стесняйтесь снимать хотя бы отрицательное голосование :) Сначала я должен был дать вам развернутый ответ, извините за краткость. - person maxpower; 03.08.2010
comment
Я также работаю над правильной вставкой в ​​числа для ipad, и я посмотрю, смогу ли я получить пример для этого, но я только начал этот путь, поэтому это может занять немного времени, не уверен. - person maxpower; 03.08.2010

Вполне возможно. UIPasteboard обычно содержит несколько значений, индексированных их UTI.

Вот рабочий пример того, как получить public.html в качестве основного типа.

-(NSString * _Nullable) getHtmlFromPB {
    static NSArray * prefs = @[@"public.html",@"public.utf8-plain-text",@"public.plain-text"];
    if (!UIPasteboard.generalPasteboard.hasStrings) return nil;
    for (NSString * theone in prefs) {
        if ([[UIPasteboard generalPasteboard].pasteboardTypes indexOfObject:theone] == NSNotFound) continue;
        return [UIPasteboard.generalPasteboard.items.firstObject objectForKey:theone];
    }
    return nil;
}

Если вам нужно объяснение: prefs массив содержит предпочтительный UTI для содержимого Pasteboard в желаемом порядке. Итак, потребуется один из них или ничего.

person ETech    schedule 11.06.2021
comment
Извините, но этот вопрос был задан более 10 лет назад - все сильно изменилось. - person ManniAT; 13.06.2021
comment
Во всяком случае, вопрос все еще актуален. Я видел это давным-давно и должен был понять и реализовать UIPasteboard концепции и детали, основанные на @ F'x NO. Ситуация изменилась, но это «Нет» по-прежнему остается лучшим ответом и количеством людей (я тоже 5 лет назад), которые могут принять во внимание - это правда, и просто возьмите первый элемент из UIPasteboard, который, вероятно, будет трудно обработать Apple rtf. Таким образом, изменения должны приводить к обновлению информации о них. - person ETech; 14.06.2021