JNMentionTextView
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文件。