将HTML复制到UIPasteboard

时间:2010-03-13 14:58:19

标签: iphone html ios uipasteboard

我想将HTML从我的应用程序传输到iPhone邮件应用程序。 我已经有了HTML文本 - 至少说< span style ='color:red'> Test< / span> 我可以将它放到UIPasteBoard上 - 但是当我将它粘贴到邮件中时,我得到了html源代码。

当我在HTMLView中放置相同的字符串时 - 在那里选择并复制它,在邮件中粘贴为红色文本。

我需要做什么才能将字符串放在UIPasteBoard中,以便将其作为红色文本粘贴到邮件应用程序中? 我一直在寻找“格式类型” - 并且发现当我在剪贴板中有元素(从UIWebView复制)时,UIPasteBoard返回“Aplle Web Archive粘贴板类型”。 但是在将内容添加到UIPasteBoard时将其设置为类型会在邮件应用程序中粘贴任何内容。

曼弗雷德

5 个答案:

答案 0 :(得分:8)

事实并非如此。你可以将任何东西粘贴到粘贴板上,去阅读文档。

我最后整理了一个教程,展示了如何将HTML复制到Mail应用程序中。 http://mcmurrym.wordpress.com/2010/08/13/pasting-simplehtml-into-the-mail-app-ios/

答案 1 :(得分:2)

在您在评论中提供的相同链接上,您会在顶部找到此段落。

统一类型标识符(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

其中解释了UTI。

最后,此链接为您提供了几种类型http://developer.apple.com/iphone/library/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259-SW1

当然,该列表不是所有类型,因为您可以创建自己的类型。

我已成功将html粘贴到邮件应用中。我会给你一个好的开始......

创建一个将在粘贴板中显示数据类型的应用。在设备上转到Safari,复制网页。运行您的应用程序,您会注意到粘贴板类型是“Apple Web Archive粘贴板类型”。请注意,这实际上是一种粘贴板类型(自定义类型)。如果您尝试通过创建Web存档并尝试将其作为文本粘贴到邮件应用程序中来自行复制Safari移动复制和粘贴功能,则会将Web存档文件显示为原始xml。如果您将类型定义为“Apple Web Archive粘贴板类型”,则邮件应用程序实际上会将粘贴格式设置为html。

如果您想知道网络存档的样子。在桌面游戏中,只需将网页保存为存档,然后在文本阅读器中查看文件(文本编辑将尝试解析它,因此您可以使用其他程序查看存档xml)。

请阅读所有文档,因为您可以发现您可以在发送给我的链接中执行自定义类型。

答案 2 :(得分:2)

我已经开始使用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>

答案 3 :(得分:0)

绝对有可能。 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。所以,要么需要其中之一,要么什么都不做。

答案 4 :(得分:-13)

不,它不能。 UIPasterBoard只接受字符串,图像,URL和颜色。