一个用于在 UITextView 中添加实时智能标点的即时效用。适用于 iOS 7 或更高版本。
JTSSmartPunctuation 将常见的由笨拙标点符号组成的简写替换为其智能对应项。它将笨拙的引号转换为 智能引号,三个连续的句号转为一个 省略号,三个连续的破折号转为一个 破折号,以及两个连续的破折号后接非破折号的任何内容转为一个 连字符。它与 从右到左的语言 兼容,并且可以安全地与合成字符序列(如 表情符号)一起使用。它只扫描最近编辑的周边区域,因此即使是非常长的文本段落也可执行良好。
在 iOS 7 或更高版本中,类似于 UITextView
的文本输入视图使用 NSTextStorage
实例作为其文本的后备存储。这个文本存储对象接受一个可选的符合 NSTextStorageDelegate
协议的代理。此协议包括以下方法
- (void)textStorage:(NSTextStorage *)textStorage
willProcessEditing:(NSTextStorageEditActions)editedMask
range:(NSRange)editedRange
changeInLength:(NSInteger)delta;
这个方法在用户对文本进行了新的编辑后调用,但在该编辑被提交和 UI 更新之前。因此,这是用智能标点替换笨拙标点符号的完美时机。
您的应用程序需要一个对象将其设为文本视图文本存储的代理
[self.textView.textStorage setDelegate:self];
然后实现以下代理方法
- (void)textStorage:(NSTextStorage *)textStorage
willProcessEditing:(NSTextStorageEditActions)editedMask
range:(NSRange)editedRange
changeInLength:(NSInteger)delta {
[JTSSmartPunctuation fixDumbPunctuation:textStorage
editedRange:editedRange
textInputObject:self.textView];
}
就是这样。