【发布时间】:2015-01-04 19:43:01
【问题描述】:
我正在尝试模拟 iOS Pages 和 Keynote 应用程序的粘贴板行为。简而言之,允许将基本的 NSAttributedString 文本格式(即 BIU)粘贴到 UITextView 中,但不能粘贴图像、HTML 等。
行为总结
- 如果您从 Notes 应用程序、Evernote 复制格式化文本或从网站复制文本和图像,Pages 将仅粘贴纯文本字符串
- 如果您从 Pages 或 Keynote 中复制格式化文本,它会将格式化文本粘贴到 Pages、Keynote 等的其他位置。
- 一个不希望的结果,但可能需要承认的是,Notes 应用程序或 Evernote 都不会粘贴从 Pages 或 Keynote 复制的格式化文本。我推测应用程序之间的差异是使用 NSAttributedStrings,而不是 HTML?
这是如何实现的?在 Mac OS 上,您似乎可以自己 ask the pasteboard to return different types,让它同时提供富文本和字符串表示,并首选使用富文本。不幸的是,对于 iOS,readObjectsForClasses 似乎不存在。也就是说,我可以通过日志看到 iOS 确实有一个与 RTF 相关的粘贴板类型,thanks to this post。但是,我无法找到一种方法来请求粘贴板内容的 NSAttributedString 版本,以便我可以优先考虑粘贴。
背景
我有一个应用程序,它允许用户在 UITextViews 中对文本进行基本的 NSAttributedString 可编辑格式(即粗体、斜体、下划线)。用户想要从其他应用程序(例如 Safari 中的网页,Notes 应用程序中的文本)复制文本,以粘贴到我的应用程序中的 UITextView。允许粘贴板作为默认操作意味着我最终可能会得到我的应用程序不打算处理的背景颜色、图像、字体等。下面的示例显示了文本在粘贴到我的应用程序的 UITextView 时具有背景颜色的复制文本的外观。
我可以通过继承 UITextView 来克服 1
- (void)paste:(id)sender
{
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
NSString *string = pasteBoard.string;
NSLog(@"Pasteboard string: %@", string);
[self insertText:string];
}
意想不到的后果是,失去了保留从我的应用程序中复制的文本格式的能力。用户可能希望从我的应用程序中的一个 UITextView 复制文本,并将其粘贴到我的应用程序中的另一个 UITextView。他们希望保留格式(即粗体、斜体、下划线)。
感谢您的见解和建议。
【问题讨论】:
-
是的,它可能是 RTFD 与 HTML 的区别,当涉及到样式间应用粘贴性:)
标签: ios ios7 copy-paste nsattributedstring uipasteboard