2016-08-16 11 views
1

Facebookで使用されているような "タグ付けウィンドウ"を作成しようとしていますが、 "@"と入力すると、私のアプリでこの機能が欲しいですが、私の人生では、現在入力されている単語を取得して提案をフィルタリングする方法を理解できません。UITextViewに現在入力されている単語を取得する

は私がUITextView使用して、私はこの記事https://stackoverflow.com/a/27380612/4148782

で見てきたが、私はスウィフト3にこれを翻訳する問題を抱えている、とさえコメントので、これはとにかく解決されていないことを示唆しています。

だから私は後だ機能は次のとおりです。

  • ユーザーはUITextViewに入力を始めると言葉は、私は言葉を抽出したいのですが、「@」で始まる場合。
  • 私は単語を特定の入力に置き換えたいと思います。のは、ユーザーの種類に @abc を言ってみましょう、私は「 ABCDEF」と述べ提案をフィルタリングし、その後、私は「 ABCDEF」とUITextViewに @abcを交換できるようにしたいです。

私は言葉が現在型付けとない最新型指定された単語取得します注意してください。

+0

、[https://objectivec2swift.com/](https://objectivec2swift.com/と呼ばれる迅速にOBJ-Cから変換するサイト)があります – Tj3n

+0

クール、わかりませんでした!しかし、そのサイトがなくても、感謝しています。将来の参照のために使用されます。 – ClockWise

答えて

1

いつものように、私はこれを動作させるのにかなりの時間を費やしていました。質問を投稿した後、私はそれを動作させました。だからここに私が使用したコードですが、私はこれが私の作品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 
} 
3

のための呼び出しを廃止予定しています。あなたが知っている

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 
    } 
} 
関連する問題