代码之家  ›  专栏  ›  技术社区  ›  Joshua

带语法高亮显示的UITextView

  •  38
  • Joshua  · 技术社区  · 15 年前

    如何在 UITextView ,特别是 语法突出显示 侦查 )为了 Objective-C ?

    我对如何做到这一点的一些想法:

    • NSAttributedString . 现已在iOS 3.2及更高版本中提供。但我该怎么做呢 进入一个超文本视图?
    • UIWebView . 当用户完成编辑并用CSS样式表给文本上色时,覆盖它。但我怎么能在一个 ,给它文本,然后给它着色?
    5 回复  |  直到 8 年前
        1
  •  79
  •   Max Seelemann    12 年前

    更新: 自从iOS 7和 文本工具包 ,语法高亮显示变得非常简单。 Look no further than here


    • UITextView : 纯文本 可编辑 <div> ,由编辑引擎更改。您可以在其中更改DOm,但这都是私有API。都是私人的,所以别无选择。
    • UIWebView : html格式 无法编辑 . 这是没有办法的。如果没有私有API和很多麻烦,就无法获得选择、访问DOM等。编辑就像在UITextView中一样,但需要一个全新的层次。仍然是:私人的。
    • CoreText 框架:自从iOS3.2以来非常不错 引擎。但就是这样。可以直接布局和渲染 NSAttributesString s、 但是,没有用户交互。没有文本选择,没有文本输入,没有拼写检查,没有替换,没有突出显示,没有渲染。要在有长文本的旧设备上快速运行,还需要做大量的工作。
    • UITextInput 协议:允许与键盘交互并抓取 文本输入 . 还具有基本的文本替换。问题:只输入文本,记录不好。无文本选择等(见上文)。

    所以我们到了。两个功能齐全的组件缺少中心功能,两个部分解决方案缺少缺失的环节。以下是我能想到的所有可行方法:

    • 让用户编辑 取消样式化并在 UIWebView . 对于后者,你可以使用三个20的东西。
    • 灭火器 . 这包括但不限于文本选择、突出显示、背景颜色、文本存储和管理、效率、拼写检查等。其中一些由系统框架提供,但仍需要大量集成。
    • 提交一个bug并等待一个好的公共API(我个人的方法)。
    • UItextView 多姆。

    Omni小组采用了第二种方法,创建了一个可编辑文本视图。你可以在图书馆找到它 OmniUI

    这其中有一个有趣的方面:我工作。苹果声称没有在其中使用任何私有API。但是文本选择与操作系统中的非常相同。所以他们一定把框架源代码复制到了应用程序中。非常诚实的方法;)

        2
  •  12
  •   mxcl    14 年前

    由于iOS5,您可以使用UIWebView并设置 contenteditable="true"

    我唯一的问题是你好像没有拼写检查。

        3
  •  2
  •   ma11hew28    14 年前

    JTextView 是一个 UITextView 支持 NSAttributedString

        4
  •  2
  •   JP Illanes    9 年前

    如果有人还在为此寻找一个完整的解决方案,我知道有两个库可以提供:

    • Highlightr :一个用于语法高亮显示的Swift库,支持数百种语言,但使用JS作为后端。不过,这对于现场编辑来说已经足够快了。( 免责声明
    • SyntaxKit :本机解决方案 Sam Soffes
        5
  •  0
  •   Community Mohan Dere    9 年前

    我不太了解语法检测,但是如果您想在同一个UITextView中有多个样式,那么 Three 20 UI 是你应该看的东西

    What is the best way to implement syntax highlighting of source code in Cocoa