我的应用程序允许用户通过单击一些格式按钮来格式化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在粘贴时自动接受格式化文本,就像它在复制时自动提供格式化文本一样?
邓肯问道,“你确定你已经设置了uitextview来处理富文本.”我不知道有什么设置,但我再次检查了UITextView类引用并找到了allowEditingTextAttributes属性.之前我没有使用过,因为我提供了自己的格式化按钮,并且不需要启用系统Bold / Italic / Underline选项.但是当我为我的UITextView将该属性设置为YES时,它开始自动接受格式化文本.呼!