在UITextView中获取当前键入的单词

我试图制作一个“标签窗口”,非常类似于在Facebook上使用的那个你input“@”的标签窗口,并且在你的朋友之间提出build议,在哪个标签上标注。 我想在我的应用程序中的这个function,但我不能为我的生活弄清楚如何获取当前键入的单词,以过滤build议。

我使用UITextView ,我一直在看这个posthttps://stackoverflow.com/a/27380612/4148782

但我有问题翻译到Swift 3,即使如此评论表明,这还没有解决。

所以我之后的function是:

  • 用户开始在UITextViewinput,如果单词以“@”开始,我想提取单词。
  • 我想用一定的input来代替这个词。 比方说,用户input@abc ,然后过滤一个提示“ abcdef ”,然后我想用“ abcdef ”代替UITextView中的@abc

请注意,我希望当前input的单词不是最近input的单词。

这对我有用。

 extension UITextView { var currentWord : String? { let beginning = beginningOfDocument if let start = position(from: beginning, offset: selectedRange.location), let end = position(from: start, offset: selectedRange.length) { let textRange = tokenizer.rangeEnclosingPosition(end, with: .word, inDirection: 1) if let textRange = textRange { return text(in: textRange) } } return nil } } 

像往常一样,我花了相当长的时间试图让这个工作,分钟后,我发布了问题,我得到了它的工作。 所以这里是我使用的代码,但我已经不赞成let myRange调用

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { let myRange = Range<String.Index>(start: textView.text.startIndex, end: textView.text.startIndex.advancedBy(range.location)) var subString = textView.text.substringWithRange(myRange) subString += text let wordArray = subString.componentsSeparatedByString(" ") if let wordTyped = wordArray.last { currentWord = wordTyped print("word typed: " + wordTyped) } return true }