【发布时间】:2011-12-22 04:07:37
【问题描述】:
如您所知,iOS 5 中的 Mail 应用程序有一个富文本编辑器,有没有办法将此功能用于常规 UITextView ?
【问题讨论】:
-
据我了解,这似乎不太可能stackoverflow.com/questions/4688332/… 如果可能的话,那将是一件好事。
如您所知,iOS 5 中的 Mail 应用程序有一个富文本编辑器,有没有办法将此功能用于常规 UITextView ?
【问题讨论】:
iOS 5 的富文本编辑控件也出现在 iOS 4 的笔记应用中(在电脑上制作富文本笔记并同步即可查看)。
这是他们在自己的应用程序中使用的自定义 Apple 控件,但未在任何官方开发人员 API 中发布。它可能在 SDK 中的某个地方,但由于它没有记录,即使你找到并使用它,Apple 也会拒绝你的应用。
基本上,如果您想要一个富文本控件,您必须自己制作。
编辑:尝试使用这个:https://github.com/omnigroup/OmniGroup/tree/master/Frameworks/OmniUI/iPad/Examples/TextEditor/。我没用过,不知道效果如何。 (链接来自this question)
【讨论】:
我知道在 iOS 5 中创建富文本编辑器的两种基本方法:
使用核心文本和自定义视图。我对这种方法没有任何经验。
使用 UIWebView(而不是 UITextView)和contentEditable HTML 属性。基本思想是从您的应用程序资源目录加载自定义 HTML 文档。它需要的最低限度是:
要初始化富文本编辑器视图:
1. 将此文件的内容加载到NSMutableString 中,并将 TEXT_PLACEHOLDER 字符串替换为您要编辑的文本。
2. 使用该 HTML 字符串将 loadHTMLString:baseURL: 消息发送到 UIWebView。
现在你有一个 UIWebView 在 div 和 contentEditable 中显示你的文本。此时,您应该能够在文本上运行您的应用程序,并显示光标并能够添加/删除文本。下一步是添加富文本格式功能。这是通过一组简单的 javascript 函数调用来完成的。请参阅the Mozilla documentation on contentEditable 以获得很好的参考。您还需要向您的 HTML 模板文件添加一个 Javascript 函数,如下所示:
function getHtmlContent() { return document.getElementById('myDiv').innerHTML; }
因此,您可以使用[myWebView stringByEvaluatingJavaScriptFromString:@"getHtmlContent()"] 轻松地将编辑后的文本检索为 HTML。您还可以添加自定义上下文菜单项,就像您在问题的屏幕截图中显示的那样。
如果您有权访问 Apple iOS 开发中心,WWDC 会议Rich Text Editing in Safari on iOS 会讨论这种方法。
这种方法的一种变体是使用第三方富文本编辑器,例如 TinyMCE。我听说在 iOS 5 中将它集成到 UIWebView 中取得了一些成功。这再次依赖于 contentEditable 属性。
【讨论】:
这是我的实现。还没有添加 UIMenuController 功能,但计划很快就会添加。
【讨论】:
看看https://github.com/gfthr/FastTextView,它是比Omni编辑器更好的开源编辑器
【讨论】: