0

我有一个UIWebView显示一些自定义 HTML 内容。如果我点击并按住,然后选择一些文本并点击该Copy选项,则会UIPasteboard使用键“com.apple.rtfd”添加文本。我现在的问题是我找不到任何方法来提取我刚刚复制的实际文本内容。如果我使用此代码:

NSString *contents = [NSString stringWithUTF8String:[data bytes]];

它返回文字字符串“rtfd”,无论我实际从UIWebView. 如果我使用此代码:

NSString *contents = [[NSString alloc] initWithData:data 
    encoding:NSUTF8StringEncoding];

我得到一个空白字符串。如何获取我刚刚复制到粘贴板中的实际文本内容?

4

2 回答 2

1

我了解到,当您将选定的文本从 a 复制UIWebView到时UIPasteboard,它实际上会将多个键值放入 UIPasteboard 返回的字典中,其中“com.apple.rtfd”只是第一个键。复制元素的实际文本值也包含在键“public.text”下。此代码可用于提取值:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
NSArray *dataArray = [pasteboard items];
NSDictionary *dict = (NSDictionary *)[dataArray objectAtIndex:0];
NSString *pastedText;
if ([dict objectForKey:@"public.text"]) {
    // this is a text paste
    pastedText = (NSString *)[dict objectForKey:@"public.text"];
}
于 2013-09-10T18:34:40.807 回答
0

提取从 Safari 复制的 rft 文本内容的正确 Swift 解决方案:

guard let rtf = textItem["public.rtf"] as? String,
        let rtfData = rtf.data(using: .utf8) else {
            return
    }
    do {
        let attr = try NSAttributedString(data: rtfData,
                                          options: [NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType],
                                          documentAttributes: nil)

        //DO SOMETHING ...
    }
    catch (let exc) {
        print(exc.localizedDescription)
    }
于 2017-03-31T10:01:00.150 回答