JNMentionTextView 1.0.4

JNMentionTextView 1.0.4

Jayel Zaghmoutt维护。



  • Jayel Zaghmoutt,Mohammad Nabulsi和Mohammad Ihmouda共同创作

JNMentionTextView

CI Status Version License Platform

JNMentionTextView是.getTextView的一个子类,可以为您iOS应用中的文本提供“提及”注解;这些注解指的是个人或实体的名称,并被视作一个单一单位,可以从其他文本中区分出来。

预览

要求

  • Xcode 9
  • iOS 9.0+
  • Swift 4.2+

安装

JNMentionTextView可以通过CocoaPods获取。要安装它,只需在Podfile中添加以下行:

pod 'JNMentionTextView'

使用

  • 导入 JNMentionTextView 模块
import JNMentionTextView
  • 初始化

    • Storyboard: 手动将 TextView 实例添加到您的 Xib,设置 'JNMentionTextView' 类,并连接 @IBOutlet 引用。

    • 编程方式: 编程初始化 'JNMentionTextView' TextView 实例。

    let textView = JNMentionTextView()
    self.view.addSubview(textView)
  • 设置

    • 设置提及替换: 作为一个字典,用于提及过程中使用的特殊字符 [ #, @ ] 及其对应的样式。
    self.textView.mentionReplacements = ["@": [NSAttributedString.Key.foregroundColor: UIColor.blue,NSAttributedString.Key.font: UIFont.systemFont(ofSize: 17.0)]]
    • 设置数据列表: 您可以选择的实体列表,作为实施其方法的 JNMentionPickable 协议的类 / 结构体。

      • 强制 getPickableTitle: 返回您可以选择的实体的标题。
      getPickableTitle() -> String
      • getPickableIdentifier: 用于唯一标识实体 - 实体 ID -。
      getPickableIdentifier() -> String
    • 设置数据列表选择器选项

       self.textView.setup(options: JNMentionOptions()
      • 选项定制: 定制数据列表外观(选择器视图)

        • backgroundColor:选择器视图的背景颜色。
        • viewPositionMode:可支持三种视图模式之一或多个
          • 向上
          • 向下
          • 自动
          JNMentionOptions(
           backgroundColor: UIColor.white,
           viewPositionMode: JNMentionPickerViewPositionwMode.automatic)

JNMentionTextViewDelegate

  • 您的类必须使用 JNMentionTextViewDelegate 协议,并通过在 JNMentionTextViewDelegate 中实现其所需方法来符合规定。
self.textView.mentionDelegate = self
  • 为符号检索数据: 在此方法中检索 JNMentionPickable 对象的数据列表,作为根据已输入的文本视图中的搜索文本要选择的数据列表;此操作将是异步的,并在选择器视图中显示加载活动指示器。
func jnMentionTextView(retrieveDataFor symbol: String, using searchString: String, compliation: (([JNMentionPickable]) -> ()) {
     var data = self.data[symbol] ?? []
     if !searchString.isEmpty {
         data = data.filter({ $0.getPickableTitle().lowercased().contains(searchString.lowercased())})
     }
     
     return compliation(data)
 }
  • 为符号获取提及项: 在此方法中检索 JNMentionPickable 对象,以在 setSmartText 方法中将其转换为提及注释。
 func jnMentionTextView(getMentionItemFor symbol: String, id: String) -> JNMentionPickable? {
     for item in self.data[symbol] ?? [] {
         if item.getPickableIdentifier() == id {
             return item
         }
     }
     
     return nil
 }
  • 为要显示的 PickerView 获取源 ViewController: 在此方法中返回要呈现选择器数据列表视图控制器(弹出视图控制器)的父视图控制器。
     func sourceViewControllerForPickerView() -> UIViewController {
         return self
     }
  • Picker 视图控制器的高度: 可选方法,用于返回数据选择器列表的高度。

       func heightForPickerView() -> CGFloat {
           return 100.0
       }
  • 自定义 PickerView TableViewCell: 可选方法,用于返回您自定义的 UITableViewCell 用于数据选择器列表;如果没有实现此方法,我们将使用自己的 TableViewCell。

       func cell(for item: JNMentionEntityPickable, tableView: UITableView) -> UITableViewCell {
           let cell = UITableViewCell()
           cell.textLabel?.text = item.getPickableTitle()
           return cell
       }

    重要提示:使用此方法注册您的自定义单元格:

        public func registerTableViewCell(_ nib: UINib?, forCellReuseIdentifier identifier: String) 
  • Picker TableViewCell 的高度: 可选方法,用于返回数据选择器列表中 UITableViewCell 的高度。

       func heightForCell(for item: JNMentionEntityPickable, tableView: UITableView) -> CGFloat {
           return 50.0
       }

辅助方法

  • 检索提及列表: 您可以通过调用 JNMentionTextView 中的类方法来获取提到的项目的列表,以及它们的范围(位置、长度)和特殊的符号字符串在 TextView 中。
   getMentionedItems(from attributedString: NSAttributedString, symbol: String = "") -> [JNMentionEntity]
  • 获取智能替换: 用于从包含特殊字符的唯一可选择的 ID 的简单字符串中检索 smart attributed string(丰富的字符串,包含提及注释):例如
    考虑 BackEnd 返回的字符串模板,并希望将其设置为可读的文本视图中的智能字段

  • 本协议由 @client_name@compnay_name 制定。

  • 并且智能字段是

    • client_name
    • compnay_name
  • 本类的这些方法将帮助您生成用于设置TextView中属性字符串的字符串

    getSmartReplacement(text: String, data: [String: [JNMentionPickable]], normalAttributes: [NSAttributedString.Key: Any],       mentionReplacements: [String: [NSAttributedString.Key : Any]]) -> NSAttributedString
  • 卸载第一个响应者: 此方法是对UITextView的卸载第一个响应者方法的封装,但它处理Picker ViewController的取消显示

        public func resignFirstResponder(completion: (() -> ())? = nil)

示例

要运行示例项目,请先克隆存储库,然后从示例目录运行pod install

作者

Jayel Zaghmoutt, Mohammad Nabulsi & Mohammad Ihmouda

许可证

JNMentionTextView遵循MIT许可证。有关更多信息,请参阅LICENSE文件。