RichTextView 3.2.1

RichTextView 3.2.1

测试已测试
Lang语言 SwiftSwift
许可证 Apache-2.0
发布最后发布2022年1月
SPM支持 SPM

SimonAhmed Elkady 维护。



 
依赖项
向下>= 0
iosMath>= 0
SnapKit>= 0
 

  • Top Hat

RichTextView

Cocoapods Carthage compatible Builds
All Contributors Discord License - Apache-2 Maturity badge - level 3 Pull Reminders

iOS 文本视图(《UIView》)能正确显示 LaTeX、HTML、Markdown 和 YouTube/Vimeo 链接

安装

使用 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 - 一个符合 UITextViewDelegateRichTextViewDelegate - 当交互元素/自定义链接被点击时也有处理
  • 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] 标签之间。通过这样做,当用户点击此文本时,它将调用 RichTextViewDelegatedidTapCustomLink 函数,并带有代表交互元素的文本的 ID(<id>),因此请确保连接到 RichTextViewDelegate 以捕获此功能。

屏幕截图

查看根目录中的 Example 文件夹中的示例项目,以查看上面操作的屏幕截图!

架构

Architecture

贡献

简单地克隆仓库,运行 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名称!