领英Hakawai。 在您的iOS Swift应用程序中实现用户提及功能。

嗨,欢迎来到我的iOS开发小博客。 在本文中,我想向您介绍如何在以Swift编写的iOS应用程序中实现提及。 我确信有很多方法可以实现此功能,但是我在这里写这篇文章是为了以更简单的步骤实现它。

当然,您可以从库的页面https://engineering.linkedin.com/ios/introducing-hakawai-powerful-mentions-enabled-text-view-ios中查看官方文档,但是我认为这已经过时了。 我花了一些时间在Swift中实现提及插件的功能。 这篇文章并不伪装成确切的文档,但最后,您将在iOS Swift应用中实现提及未来。 另外,我将展示如何实现自定义选择器视图。 因此,在不浪费更多时间的情况下,让我们更深入地研究这些步骤。

实施HAKAWAI的基本步骤提到了未来:

  • 如果要在同一视图控制器类中实现textView委托功能,请使用HKWTextView实例创建UIViewController并将其externalDelegate属性分配给该视图控制器。
  • 创建一个符合HKWMentionsEntityProtocol的类,以返回实体进行搜索并提及数组;
  • 创建一个帮助程序类,以实现HKWMentionsDelegate中提到的必需功能
  • HKWMentionsPlugin实例的委托属性分配给您的助手类的实例;
    设置textView实例的controlFlowPlugin以注册该插件。

因此,让我们更深入地研究每个步骤。

首先,创建一个UIViewController,将UITextView从对象库拖到控制器中,并将该类分配给HKWTextView

现在,创建一个名为User的新类,使他实现HKWMentionsEntityProtocol

您会看到一个错误,指出您的类不符合HKWMentionsEntityProtocol,但请放心,我们将修复它。

如果您转到HKWMentionsEntityProtocol的声明,则会看到它具有3个必须实现(返回)的必需属性。

因此,只需实施即可。 如果您喜欢我喜欢的Swift扩展,只需编写一个,并在此扩展中实现所需的功能,否则,您可以直接执行。 Swift扩展是语言的美好未来,它使您可以按逻辑对代码进行分组,您可以在这里阅读更多内容:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html

在上面的代码中,我们声明了基本的用户字段并在扩展中实现了协议。 我们只是以这种方法返回字段。 注意,对于实现entityMetadata而言,这不是必需的,仅作为示例,您可以在此处放置所需的内容。 和用于创建实体的基本构造函数。 注意,如果您已经具有要在提及列表中包含其实体的类,则可以为模型类进行扩展并实现这些方法。

现在,我们将创建一个符合HKWMentionsDelegate的帮助程序类。

您可以将其称为MentionsManager或任何您想要的名称。

我们创建了MentionsManager类,并在此处声明一个静态实例,以供将来注册IM提及插件时使用。 在扩展中,我们实现HKWMentionsDelegate

我们创建了MentionsManager类,并在此处为提及插件中的将来注册声明了一个静态实例。 在扩展中,我们实现HKWMentionsDelegate。

它包含3个需要实现的必需方法。 这些方法是asyncRetrieveEntitiesForKeyString,cellForMentionsEntity和heightForCellForMentionsEntity,这些方法的详细信息可以在协议中阅读,但简称为:

  • asyncRetrieveEntitiesForKeyString-在这里,您应该提供用户键入到textview中的某些键串的数据。 在此方法的最后,您应该调用completionBlock并将符合HKWMentionsEntityProtocol协议的数据传递给ID,并根据是否希望稍后附加其他结果而传递YES或NO。
  • cellForMentionsEntity —返回要在选择器视图中显示给定提及实体的表视图单元格。 如果使用默认选择器视图,则为true,但如果要使用自定义视图,则可以只返回nil。
  • heightForCellForMentionsEntity -最后一个,正如我从标题中所清楚看到的那样,返回被提及实体的高度。

在上面的屏幕截图中,在asyncRetrieveEntities方法中,我们刚刚创建了一个包含两个用户实体的数组。 这是一个基本示例,但是您可以在此处从某个存储库层类加载数据。

在cellForMentionsEntity方法中,我们只需要在表视图中注册单元格(UserTableViewCell),然后将其出队并设置nameL(UILabel)属性以显示实体名称,该实体名称是我们从方法entityName()返回的🙂 注意,这里的UserTableViewCell只是一个自定义单元格,我想用来展示如何实现自定义选择器视图。

最后在heightForCellForMentionsEntity方法中返回44.0。 关于HKWMentionsDelegate中所需方法的所有内容。

我们需要做的最后一件事是创建插件实例并设置其属性。

我们创建了用于显示提及选择器视图的模式,然后当用户键入此(或其中一个)符号时,我们创建了控制字符,我们应该显示建议列表。 然后我们使用这些属性以及不同模式的颜色创建插件。 将新创建的插件分配给我们的var,然后在我们的textview中注册插件,最后将委托属性分配给我们的MentionsManager共享实例。

因此,让我们构建应用程序并查看结果。

因此,正如您所看到的,我们很容易用HAKAWAI库实现提及未来。 随意问,如果有