2013-09-10 2 views
0

У меня есть UIWebView, показывающий некоторый пользовательский HTML-контент. Если я коснусь и удерживаю, затем выберите текст и коснитесь опции Copy, текст будет добавлен в UIPasteboard с ключом «com.apple.rtfd». Моя проблема в том, что я не могу найти способ извлечь фактическое текстовое содержимое того, что я только что скопировал. Если я использую этот код:Как получить содержимое RTF из UIP-карты после копирования UIWebView?

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

возвращает строковый «RTFD», независимо от того, что текст, который я на самом деле скопирован из UIWebView. Если я использую этот код:

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

Я получаю пустую строку. Как я могу получить фактическое текстовое содержимое того, что я только что скопировал в картон?

ответ

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"]; 
} 
0

Корректной Swift решения для экстракта RFT содержания текста, что скопированное из 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) 
    } 
Смежные вопросы