如何将丰富的文本粘贴到UITextView?

我的应用程序允许用户通过单击某些格式button来将文本格式化为UITextView的格式,这些button将属性应用于文本视图的属性文本属性。 我想让用户从一个UITextView复制他们的格式文本,并使用标准的剪贴板和标准剪切/复制/粘贴菜单粘贴到另一个。

目前,如果我从UITextView中复制格式化的文本,并将其粘贴到邮件应用程序中的新邮件中,格式化将被保留 – 因此,格式化文本的复制将自动进行。 但是,如果我将格式化的文本粘贴到另一个UITextView中,则只会显示纯文本。

通过遵循iOS文本编程指南中的“粘贴select”部分,我可以覆盖UITextView的粘贴方法并拦截粘贴的内容:

- (void)paste:(id)sender { UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; NSLog(@"types available: %@", [pasteboard pasteboardTypes]); for (NSString *type in [pasteboard pasteboardTypes]) { NSLog(@"type %@ (%@): %@", type, NSStringFromClass([[pasteboard valueForPasteboardType:type] class]), [pasteboard valueForPasteboardType:type]); } } 

这告诉我,粘贴板包含以下格式的内容:com.apple.rtfd,public.rtf,public.text和“Apple Web Archive粘贴板types”。 文本的值是纯文本string,rtf的值是一个RTFstring,两个Apple格式的值是NSData。

这是我卡住的地方。 如何将这些项目中的一个从粘贴板数据转换为为UITextView设置的属性string?

或者更好的是,有没有办法将UITextViewconfiguration为在粘贴时自动接受格式化文本,与复制时自动提供格式化文本的方式相同?

邓肯上面问,“你确定你有uitextview来处理丰富的文本。” 我没有意识到这个设置,但我再次检查了UITextView类的引用,并find了allowsEditingTextAttributes属性。 我以前没有使用过,因为我提供了自己的格式化button,不需要启用系统粗体/斜体/下划线选项。 但是当我为UITextView设置该属性为YES时,它开始自动接受格式化的文本。 呼!