UITEXTVIEW:获取最近在 uitextview 中输入的单词

Noo*_*yed 5 objective-c uitextview uimenucontroller ios

我想从 UITextView 获取用户输入的最新单词。

用户可以在 UITextView 的任何位置输入一个单词,在中间、结尾或开头。当用户完成输入并按下一个空格并使用“来自”的建议进行任何更正时,我会将其视为一个词UIMenuController

示例:用户在UITextView文本中间的某处输入“kimd” ,他会弹出一个自动更正“kind”的弹出窗口。在他这样做之后,我想捕获“种类”并在我的应用程序中使用它。

我在互联网上搜索了很多,但找到了讨论用户最终输入文本时的解决方案。我还尝试检测一个空格,然后进行向后搜索,直到找到某个文本后的另一个空格,以便我可以将其定义为一个单词。但我认为可能有更好的方法来做到这一点。

我在某处读到 iOS 缓存了我们在文本字段或文本视图中输入的最近文本。如果我能从顶部弹出,那就是我想要的。我只需要处理那个对象。

我真的很感激你的帮助。

注意:用户可以在 UItextview 的任何位置输入文本。我需要最近输入的词

谢谢。

Noo*_*yed 3

//This method looks for the recent string entered by user and then takes appropriate action.

     - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {

 //Look for Space or any specific string such as a space
if ([text isEqualToString:@" "]) {
NSMutableCharacterSet *workingSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet]   mutableCopy];

  NSRange newRange = [self.myTextView.text rangeOfCharacterFromSet:workingSet
                                     options:NSBackwardsSearch
                                     range:NSMakeRange(0, (currentLocation - 1))];

 //The below code could be done in a better way...
 UITextPosition *beginning = myTextView.beginningOfDocument;
 UITextPosition *start = [myTextView positionFromPosition:beginning offset:currentLocation];
 UITextPosition *end = [myTextView positionFromPosition:beginning   offset:newRangeLocation+1];
 UITextRange *textRange = [myTextView textRangeFromPosition:end toPosition:start];

 NSString* str = [self.myTextView textInRange:textRange]; 
}
}
Run Code Online (Sandbox Code Playgroud)

  • 变量 currentLocation 从哪里来? (2认同)