【问题标题】:iOS: How to copy HTML into the cut-paste buffer?iOS:如何将 HTML 复制到剪切粘贴缓冲区中?
【发布时间】:2011-09-27 19:29:43
【问题描述】:

我有兴趣让我的用户将他们输入的文本复制到剪切和粘贴缓冲区中,但我希望将其作为 HTML 进行。

这样的事情可能吗?还是我需要使用 MIME 格式? (我不知道。)

谢谢。

【问题讨论】:

    标签: ios cocoa-touch uikit clipboard uipasteboard


    【解决方案1】:

    以下代码会将您的 HTML 从您的应用程序中取出并输入到 Apple 的邮件应用程序中。该文档在这方面并没有为您提供很多帮助,因此部分原因在于查看 Apple 的应用程序在粘贴板上放置的内容,然后对其进行逆向工程。此解决方案借鉴了较早的 stackoverflow post - 跟进那里的链接以获取更多背景信息。

    NSLog(@"Place HTML on the pasteboard");
    
    UIPasteboard* pasteboard = [UIPasteboard generalPasteboard];
    NSString *htmlType = @"Apple Web Archive pasteboard type";
    
    // example html string
    NSString* htmlString = @"<p style=\"color:gray\"> <a href=@\"http://itunes.apple.com/gb/app/paragraft/id412998778?mt=8\">Paragraft</a><br><em>Less than a word processor, more than plain text</em>";
    
    NSMutableDictionary *resourceDictionary = [NSMutableDictionary dictionary];    
    
    [resourceDictionary setObject:[htmlString dataUsingEncoding:NSUTF8StringEncoding]  forKey:@"WebResourceData"];
    
    [resourceDictionary setObject:@"" forKey:@"WebResourceFrameName"];
    [resourceDictionary setObject:@"text/html" forKey:@"WebResourceMIMEType"];
    [resourceDictionary setObject:@"UTF-8" forKey:@"WebResourceTextEncodingName"];
    [resourceDictionary setObject:@"about:blank" forKey:@"WebResourceURL"];
    
    NSDictionary *containerDictionary = [NSDictionary dictionaryWithObjectsAndKeys:resourceDictionary, @"WebMainResource", nil];
    
    NSDictionary *htmlItem = [NSDictionary dictionaryWithObjectsAndKeys:containerDictionary,htmlType,nil];
    
    [pasteboard setItems: [NSArray arrayWithObjects: htmlItem, nil]];
    
    // This approach draws on the blog post and comments at:
    // http://mcmurrym.wordpress.com/2010/08/13/pasting-simplehtml-into-the-mail-app-ios/
    

    【讨论】:

    • 谢谢,我试试看。
    【解决方案2】:

    我非常喜欢这种创建基于 HTML 的内容的方法,您可以将这些内容粘贴到其他支持 HTML 的应用程序中,例如 Mail。但是,我注意到Matthew Elton 的上述解决方案只允许将粘贴板粘贴到支持 HTML 的应用程序上。例如,尝试将完全相同的内容粘贴到 Notes 应用程序中会失败。

    我从这篇文章中获得了提示:https://stackoverflow.com/a/1078471/351810,现在可以成功粘贴我想要的内容的 HTML 和纯文本版本。

    【讨论】:

    【解决方案3】:

    此解决方案将 HTML 和纯文本表示形式都放入粘贴板:

    #import <MobileCoreServices/MobileCoreServices.h>
    
    NSString *html = @"<h1>Headline</h1>text";
    NSData *data =  [html dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dict = @{@"WebMainResource": @{@"WebResourceData": data, @"WebResourceFrameName": @"", @"WebResourceMIMEType": @"text/html", @"WebResourceTextEncodingName": @"UTF-8", @"WebResourceURL": @"about:blank"}};
    data = [NSPropertyListSerialization dataWithPropertyList:dict format:NSPropertyListXMLFormat_v1_0 options:0 error:nil];
    NSString *archive = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSString *plain = [html stringByReplacingOccurrencesOfRegex:@"<[^>]+>" withString:@""];
    [UIPasteboard generalPasteboard].items = @[@{@"Apple Web Archive pasteboard type": archive, (id)kUTTypeUTF8PlainText: plain}];
    

    它使用来自RegexKitLite-stringByReplacingOccurrencesOfRegex: 来剥离HTML 标签。

    【讨论】:

    • 在某种程度上它可以工作,但它给了我想要的结果。tinypic.com/view.php?pic=2yw8tqq&s=8#.UvK-rPYkgnU 不知道为什么它没有删除 html 标签。?
    • 这是我的代码pastebin.com/Rg4QWUEK 任何建议都会被采纳。谢谢
    • 当您在调试器中单步执行时,plain 在方法末尾是否有正确的纯文本表示?
    • 当我 NSLog(@"纯文本 %@",plain);它向我显示了相同的结果

      Word

      اب تک

      含义

      迄今为止/迄今为止,当我发送邮件时,同样的事情工作正常。
    • @OrtwinGentz - 您的解决方案仍然很有效。我刚刚将使用“dataFromPropertyList”的一行更新为 data = [NSPropertyListSerialization dataWithPropertyList:dict format:NSPropertyListXMLFormat_v1_0 options:0 error:nil];因为在 2018 年这个功能已经被弃用了。
    【解决方案4】:

    我使用 w3schools。 我将我的 html 代码剪切并粘贴到他们的示例代码上,在他们的许多“自己尝试”教程中的任何一个上,然后使用他们的“运行”按钮。

    例如https://www.w3schools.com/html/default.asp

    【讨论】:

    • 哎呀,我使用任何浏览器的“查看页面源代码”来获取 html。但那是使用Windows。希望它可以帮助别人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多