【发布时间】:2014-12-09 13:11:16
【问题描述】:
我想在UITextView 中获取当前输入的单词。在这里UITEXTVIEW: Get the recent word typed in uitextview 可以找到一种获取完全键入的单词的方法,但是,我想在键入时获取该单词(无论在何处键入,开头,中间,UITextView 的结尾)。
我猜想定义输入的单词是空格字符后跟字母数字字符,或者如果当前位置(以某种方式用range.location 找出)是UITextView 的开头,那么应该考虑后续的任何内容也一样。当另一个空白字符跟随时,一个单词被完成。
我试过了:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text`
但我无法找到正确的范围。
再次简而言之:我需要在UITextView 中找到子字符串,其中子字符串是当前键入的单词。
编辑:因为问题出现了。我正在使用NSLayoutManager 并将NSTextContainer 绑定到它,然后将其作为layoutManager 传递给NSTextStorage。
EDIT2:(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 的主要问题是range.location 与指标不一样,但总是少 1。如果光标位于位置 1,在键入一个字母后,range.location 将返回 0。有什么办法解决这个问题吗?此外,UITextView 的 text 属性似乎也减少了 1。当文本为foobar 并且我输出UITextView.text 时,我得到fooba。因此range.location+1 返回异常Range {0, 1} out of bounds; string length 0'
EDIT3:
也许使用NSTextStorage 而不是UITextView 更容易获得我想要的结果?
【问题讨论】:
-
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text方法将一次为您提供单个字符的范围,您必须一一接受并制作最新的单词 -
你想在哪里显示它?在标签还是?这对我有帮助
-
您应该查看
UITextInputProtocol。如果您在实现代码时遇到任何问题,请告诉我。 -
@The-Rooster 这是一个有点“复杂”的设置。我正在使用
NSLayoutManager并将NSTextContainer绑定到它,然后将其作为layoutManager传递给NSTextStorage。 -
@n00bProgrammer 我只是看了
UITextInputProtocol并真的不知道它应该如何提供帮助。UITextInputProtocol中的任何细节我应该仔细看看?
标签: ios objective-c uitextview substring nsrange