UPDATE:自iOS 7和TextKit以来,语法高亮显示变得非常简单.Look no further than here美元(由我介绍).
假设您想要一个可编辑的组件,就没有太多希望了.快速概述,以确保涵盖所有内容:
- 仅限
UITextView
:plain text,无(公共)通道.但是editable.没有机会修改任何东西,没有机会获得几何图形等.在内部使用web视图.每个段落都是<div>
,由编辑引擎修改.您可以在其中更改DOm,但这都是私有API.都是私有的,因此别无 Select .
UIWebView
:html,所以它可以设计样式,有嵌入的图像,等等.我猜(不看它)这就是前面提到的三个20 UI使用的.问题是:cannot be edited.没有(公开的)办法来解决这个问题.如果没有私有API和很多麻烦,你就无法获得 Select 、访问DOM等等.编辑工作与UITextView类似,但需要一个全新的头痛级别.还是:私有的.
CoreText
框架:因为iOS 3.2是一个非常好的rendering引擎.但就是这样.可以直接布局和渲染NSAttributesString
.但是,没有用户交互.没有文本 Select ,没有文本输入,没有拼写判断,没有替换,没有高亮显示,没有渲染.要在有长文本的旧设备上快速运行,需要做大量工作.
UITextInput
协议:允许与键盘交互并获取text input.还具有基本的文本替换功能.问题:仅文本输入,文档记录不完整.无文本 Select 等(见上文).
我们到了.两个功能齐全的组件缺少中心功能,两个部分解决方案缺少缺失的环节.以下是我能想到的所有可行方法:
- 让用户编辑一个
UITextView
样式的文件,并以UIWebView
样式显示内容.对于后者,你可以使用Three20.
- 在
CoreText
和UITextInput
之间建立缺失的链接.这包括但不限于文本 Select 、突出显示、背景色、文本存储和;管理、效率、拼写判断等.其中一些由系统框架提供,但仍需要大量集成.
- 提交一个bug并等待一个好的公共API(我个人的方法).
- 说服苹果再次允许私有API,并 destruct
UItextView
年代的DOM.
Omni Group采用了第二种方法,创建了一个可编辑文本视图.你可以在OmniUI框架中找到它.然而,这种实现还远远不够完美.(至少是几个月前我上次判断的时候).他们尽了最大努力,但仍然未能在用户交互方面达到完美.苹果肯定已经投入了至少几年的人力,只在用户界面上进行文本 Select 和编辑.在国内什么也做不了,就连像omni group这样的公司似乎也是如此.
这一切都有一个有趣的方面:我工作.苹果声称没有在其中使用任何私有API.但文本 Select 与操作系统中的文本 Select 完全相同.所以他们一定是将框架源代码复制到了应用程序中.非常诚实的方法;)