如何将丰富的文本粘贴到UITextView中?
我的应用程序允许用户通过单击将属性应用于文本视图的属性文本属性的某些格式按钮来格式化UITextView中的文本。 我想让用户从一个UITextView复制他们的格式化文本,并使用标准剪贴板和标准剪切/复制/粘贴菜单将其粘贴到另一个文本中。
目前,如果我从UITextView中复制格式化文本并将其粘贴到邮件应用程序中的新邮件中,格式化将被保留 - 因此格式化文本的复制将自动进行。 但是,如果我将格式化的文本粘贴到另一个UITextView中,则只会显示纯文本。
按照iOS文本编程指南中的“粘贴选择”部分,我可以覆盖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粘贴板类型”。 文本的值是纯文本字符串,rtf的值是一个RTF字符串,两种Apple格式的值是NSData。
这是我卡住的地方。 如何将这些项目中的一个从剪贴板数据转换为为UITextView设置的属性字符串?
或者更好的是,有没有办法将UITextView配置为在粘贴时自动接受格式化文本,与复制时自动提供格式化文本的方式相同?
邓肯上面问道,“你确定你有uitextview来处理富文本。” 我没有意识到这个设置,但我再次检查了UITextView类的引用并找到了allowsEditingTextAttributes
属性。 之前我没有使用过,因为我提供了自己的格式化按钮,并且不需要启用系统粗体/斜体/下划线选项。 但是当我为UITextView设置该属性为YES时,它开始自动接受格式化文本。 呼!