我的应用程序允许用户通过单击一些格式按钮来格式化UITextView中的文本,这些按钮将属性应用于文本视图的attributedText属性。我想允许用户从一个UITextView复制他们的格式化文本,并使用标准的剪贴板和标准剪切/复制/粘贴菜单将其粘贴到另一个。
目前,如果我从UITextView复制格式化文本并将其粘贴到Mail应用程序中的新邮件中,则格式化将被保留 - 因此格式化文本的复制将自动进行。但是,如果我将格式化文本粘贴到我的应用程序中的另一个UITextView中,则仅显示纯文本。
通过跟随Text Programming Guide for 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在粘贴时自动接受格式化文本,就像复制时自动提供格式化文本一样?
答案 0 :(得分:7)
Duncan上面问道,“你确定你已经设置了uitextview来处理富文本。”我不知道有什么设置,但我再次检查了UITextView类引用并找到了allowsEditingTextAttributes
属性。之前我没有使用过,因为我提供了自己的格式化按钮,并且不需要启用系统Bold / Italic / Underline选项。但是当我为我的UITextView将该属性设置为YES时,它开始自动接受格式化文本。呼!