Hakawai 7.4.8

Hakawai 7.4.8

测试已测试
语言语种 Obj-CObjective C
许可证 Apache-2.0
发布最后发布2023年3月

Ryan DowningJacek SuligaJacek Suligali-jychenRyan DowningKuixi Song 维护。



Hakawai 7.4.8

  • Austin Zheng

Build Status

Hakawai

UITextView 的子类,提供扩展功能和 '插件' 支持。Hakawai 内置 Mentions 插件,它提供了一种强大且灵活的方式,便于为您的 iOS 应用程序添加类似社交媒体风格的 @mentions 标注支持。

要获得更高级的概述,请查看 LinkedIn 工程博客上的博客文章

特性

  • 方便的 UITextView 实例的 替代品
    • 包含 Storyboards 和 XIBs
  • 使用一组强大的基于块的 API,轻松 添加、删除和转换 文本视图的普通和属性文本
  • 与属性格式化一起工作,并使用增强的属性 API 轻松注册或注销 自定义属性
  • 轻松 添加、删除和管理 附件视图
    • 这些 UI 元素可以添加/删除到文本视图中以进行额外功能
  • 使用单行视图模式将文本行的当前行锁定到文本视图的顶部或底部
  • 程序性地 关闭自动更正建议,并临时覆盖自动更正、自动纠正和拼写检查模式
  • 解决了多个 UITextView 文本布局问题,因为 Hakawai 实现了 自定义布局管理器和文本容器
  • 通过注册或注销插件来 扩展功能
  • 实验性 - 使用可选的抽象层轻松 监控文本视图内容的用户更改
    • 正确处理中文和日语键盘的两个阶段插入
    • 抽象层内置到文本视图中
    • 如果需要,也可以将其拉出来独立使用

🔧入门

有关更详细的文档,请查看 wiki

需求

  • Hakawai 支持 iOS 7.1 及以上版本,因为它广泛使用了 TextKit。iOS 7.0 中的严重 TextKit 缺陷破坏了库中提供的许多功能。请自行承担风险,您可以使用 Hakawai 与 iOS 7.0 配合使用(如果您只想使用文本转换器,这可能是一种可行的选择)。

  • Hakawai 使用类扩展,因此如果项目中尚未添加,您应该在项目设置中添加 -ObjC 链接器标志。如果未设置,CocoaPods 将自动为您配置此标志。

集成 Hakawai

  • Cocoapods:只需在 Podfile 中添加 pod 'Hakawai' 并按常规安装即可。
  • 查看项目并将源文件复制到您自己的项目中。

功能

Hakawai 的主要实体是 HKWTextView。它可以直接替换原生的 UITextView,并且可以像使用 UITextView 一样使用,但有一个重要例外。绝不要设置 HKWTextViewdelegate 属性。如果需要 UITextViewDelegate 的功能,请改用 externalDelegatesimpleDelegate 属性。这些代理的组合应该覆盖您所有可能需要使用 delegate 的情况。

Hakawai 的功能分为三个主要类别

  1. HKWTextView+TextTransformation:用于处理和修改文本视图中文本和属性的方法
  2. HKWTextView+Extras:一些辅助工具
  3. HKWTextView+Plugins:供插件使用的 API
    • 您可以直接使用这些功能,但这样做可能会或可能不会与任何活动的插件发生冲突

示例应用

HakawaiDemo 示例应用演示了 Hakawai 的一些功能。通过使用 CocoaPods 的 try 功能获取它:运行 pod try Hakawai,或者手动检出仓库并运行 HakawaiDemo 选项。以下是包含的内容:

  1. 第一个标签页:一个简单的文本输入字段,包含反转或对所选文本执行 ROT13 转换的按钮

  2. 第二个标签页:演示控制流插件和抽象层,包含一个 '控制台',在用户输入或删除文本时将显示用户操作。

  3. 第三个标签页:演示提及插件

    • 输入 @+ 以查看可以选择的实体列表(为了演示目的,选择了 前 25 位图灵奖得主
    • 您还可以输入三个字符的名称来显示内置选择器

🔌插件

插件在 podspec 文件中定义为子规范,因此您可以挑选和选择您想使用的插件(只要包括核心子规范)。如果您没有使用 CocoaPods,则每个插件都位于 Xcode 的单独组中,并且可以完全删除每个插件的组而不影响核心库的功能。

Hakawai 支持两种类型的插件,这两种类型都接收父 HKWTextView 的引用。

  1. 简单 插件:可以访问所有 API 并且可以引用核心的 HKWTextView

  2. 控制流 插件:在 simple 插件能做的所有事情中,还可以实现额外的代理方法以响应文本视图状态的更改。有两个主要子类型,但请注意,只能注册两种子类型中的一种到文本视图中

    1. 直接控制流插件:接收 UITextViewDelegate 方法以监控文本视图的状态并响应用户操作

    2. 抽象层控制流插件:接收 HKWAbstractionLayerDelegate 方法

可以一次注册多个简单插件,但只能同时注册一个控制流插件。插件可以在任何时候注销。

💬提及插件

有关更多详细文档,请查阅维基上的 提及页面

Hakawai/Mentions 是一个插件,它允许在 HKWTextView 中创建注释。注释是引用特定实体的文本部分,被视为一个整体单元,并且可以与应用文本的其余部分不同的样式。注释的示例是许多流行社交媒体应用程序支持的提及功能。

要查看 Mentions 的实际效果,请查看包含的示例应用。或者,从 App Store 下载 LinkedIn iOS 应用,使用 LinkedIn 账户登录,并尝试提及一个联系人或公司。

提及功能

  • 易于使用 - 只需实现一个方法来返回查询字符串的结果,以及一个方法来返回用于显示结果的单元格
  • 支持隐式注解(在输入一定数量的自定义字符后触发)
  • 支持显式注解(在输入任意一个特殊字符后触发)
  • 基于状态机逻辑,改变或扩展行为更加简便
  • 查询结果可以同步或异步返回
  • 对于单个查询可以返回多组结果
  • 自动限制查询速率
  • 当用户将选择光标移入注解中,或者在同注解后按退格键时,注解将“突出显示”
  • 插件提供了智能截断注解的选项;例如,将全名截断为仅首字母
  • 几乎可以自定义几乎每个方面:注解的样式(高亮和非高亮状态)、选择视图、结果单元格等
  • 即使在用户剪切粘贴文本时,注解的状态也能保持适当的连续性
  • 注解与自动首字母大小写和自动更正兼容

集成提及

  1. 创建一个辅助类来实现HKWMentionsDelegate中的三个必需方法
  2. 创建一个HKWTextView的实例
  3. 使用其中一个工厂方法创建一个HKWMentionsPlugin的实例
  4. 将提及插件的delegate属性设置为辅助类的实例
  5. 在文本视图实例上调用registerControlFlowPlugin:以注册插件

请参阅相关的类和方法文档注释以获取更多信息。

🚧测试

Hakawai包括一个由Specta和Expecta库支持的几乎全面的单元测试套件,这些库用于主文本视图。我们希望在未来对抽象层和提及插件也有测试覆盖率,尽管单元测试可能不足以测试这些组件。

📝贡献

欢迎提交错误报告、功能请求、拉取请求、评论、批评和诚实的反馈。如果您找不到匹配的重叠项,请创建一个问题

我们目前使用Cocoapods 1.5.0版本来管理依赖项。

关于此库的计划/已知问题包括

  1. 验证抽象层的功能和集成

  2. 选择预测建议后正确处理插入的非周期标点符号(目前,当其被标点符号替换时,不记录隐式删除的空格)。

  3. 对韩文文本输入的支持

  4. 自动化测试

🐉词源

根据维基百科,“在毛利神话中,[...] Hakawai是一种吞食人的怪鸟”。就是这样。

©️版权与许可

Hakawai © 2019 LinkedIn Corp. 依据Apache许可证第2.0版许可。