安装
使用 Cocoapods
只需将以下内容添加到您的 Podfile 中
pod 'RichTextView'
然后在您的仓库中运行 pod install
使用 Carthage
只需将以下内容添加到您的 Cartfile 中
github "tophat/RichTextView"
然后在您的仓库中运行 carthage update --platform iOS
使用说明
首先导入项目后,可以通过实例化 RichTextView
来使用它
import RichTextView
初始化 RichTextView
的方式如下
let richTextView = RichTextView(
input: "Test",
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
isSelectable: true,
isEditable: false,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
textViewDelegate: nil,
frame: CGRect.zero,
completion: nil
)
您还可以按照以下方式更新现有的 RichTextView
richTextView.update(
input: "Test",
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
latexTextBaselineOffset: 0,
interactiveTextColor: UIColor.blue,
completion: nil
)
以下为参数定义
input
- 您要渲染的字符串latexParser
- 如果您想以自定义方式处理 LaTeX 解析,可以传递一个符合LatexParserProtocol
的类。目前我们使用iosMath
Pod 默认处理 LaTeX 解析font
- 要渲染的文本字体texColor
- 要渲染的文本颜色isSelectable
- 定义RichTextView
是否可选择的一个属性isEditable
- 定义RichTextView
是否可编辑的一个属性latexTextBaselineOffset
- 需要渲染的 LaTeX 文本属性文本附加的基线偏移量interactiveTextColor
- 任何交互元素/自定义链接的文本颜色(在输入格式化
中的 交互元素 下查看)textViewDelegate
- 一个符合UITextViewDelegate
的RichTextViewDelegate
- 当交互元素/自定义链接被点击时也有处理frame
- 表示RichTextView
框架的CGRect
completion
- 用于处理可能返回的错误的一个完成块。即使存在错误,输入仍然会渲染,但它可能看起来与预期不同。
输入格式化
为了让 RichTextView
能够处理可能遇到的各类使用场景,输入字符串需要按照以下格式进行格式化
- LaTeX: 将您想要渲染为 LaTeX 的任何文本放在
[math]
和[/math]
标签之间。示例:[math]x^n[/math]
- 代码: 将您想要渲染为代码的任何文本放在
[code]
和[/code]
标签之间。示例:[code]print('Hello World')[/code]
- HTML/Markdown: 无需格式化
- YouTube 视频内容: 按照如下格式在 YouTube 标签中放置 YouTube 视频的 ID:
youtube[dQw4w9WgXcQ]
。任何视频的 YouTube ID 可以通过查看视频 URL(例如:https://www.youtube.com/watch?v=dQw4w9WgXcQ
)并取v=
URL 参数后面的值来找到。在这种情况下,YouTube 视频的 ID 是dQw4w9WgXcQ
- Vimeo 视频内容: 按照如下格式在 Vimeo 标签中放置 Vimeo 视频的 ID:
vimeo[100708006]
。任何视频的 Vimeo ID 可以通过查看视频 URL(例如:https://vimeo.com/100708006
)并取第一个/
后面的值来找到。在这种情况下,Vimeo 视频的 ID 是100708006
- 交互元素:如果您想要添加在点击时具有自定义处理的文本,请将文本放在两个
[interactive-element id=<id>]
和[/interactive-element]
标签之间。通过这样做,当用户点击此文本时,它将调用RichTextViewDelegate
的didTapCustomLink
函数,并带有代表交互元素的文本的 ID(<id>
),因此请确保连接到RichTextViewDelegate
以捕获此功能。
屏幕截图
查看根目录中的 Example
文件夹中的示例项目,以查看上面操作的屏幕截图!
架构
贡献
简单地克隆仓库,运行 pod install
,您应该就可以开始了。
如果您想视觉上审查QA您的更改,您可以导航到Example项目(在根目录的 Example
文件夹中找到),运行 pod install
,然后构建并运行应用程序。这将显示 RichTextView
的一些常见用法。
示例项目指向本地副本的 RichTextView
pod,因此任何当地做出的更改都会反映在示例项目中。
但是,您需要处于遗留构建系统中以看到更改的反映。存在与缓存开发 Pods 和 XCode 10 的一个已知问题。
请随时将额外的输入/输出示例添加到示例项目中,尤其是如果您添加了任何新功能。
另外,请确保在开发QA过程中作为一部分运行单元/UI 测试。
致谢
感谢以下各位(emoji key)
Ahmed Elkady |
Orla Mitchell |
Jake Bolam |
Sanchit Gera |
---|---|---|---|
Monica Moore |
Brandon Baksh |
Siavash Bidgoly |
Stephen Truong |
感谢Carol Skelly捐赠Github组织以及Kevin Zhow捐赠Pod名称!