我有UIWebView
显示一些自定义HTML内容。如果我点按并按住,然后选择一些文字并点按Copy
选项,文字会以“com.apple.rtfd”键添加到UIPasteboard
。我现在的问题是我找不到任何方法来提取我刚才复制的实际文本内容。如果我使用此代码:
NSString *contents = [NSString stringWithUTF8String:[data bytes]];
它返回文字字符串“rtfd”,无论我实际从UIWebView
复制了什么文字。如果我使用此代码:
NSString *contents = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
我得到一个空白字符串。如何获取刚刚复制到粘贴板中的实际文本内容?
答案 0 :(得分:1)
我了解到,当您将所选文本从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"];
}
答案 1 :(得分:0)
一个正确的Swift解决方案,用于提取从Safari复制的文本内容:
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)
}