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

Clo*_*ise 1 uitextview ios swift

我正在尝试制作一个“标记窗口”,就像在 Facebook 中使用的那个窗口一样,您可以在其中键入“@”,然后它会在您的朋友之间就标记哪个窗口提出建议。我希望在我的应用程序中使用此功能,但我终生无法弄清楚如何获取当前输入的单词以过滤建议。

我使用了一个UITextView,我一直在看这篇文章/sf/answers/1916642871/

但是我在将其转换为 Swift 3 时遇到了问题,即便如此,评论表明这无论如何都没有解决。

所以我追求的功能是:

  • 用户开始输入 a UITextView,如果单词以“@”开头,我想提取该单词。
  • 我也想用某个输入替换这个词。假设用户键入@abc并且我过滤了一个说明“ abcdef ”的建议,然后我希望能够用“ abcdef ”替换UITextView 中的@abc

请注意,我想要当前输入的单词而不是最近输入的单词。

Vin*_*mar 5

这对我有用。

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
   }
}
Run Code Online (Sandbox Code Playgroud)