1

私は iOS 8 用のカスタム キーボード拡張機能を作成していますが、キーボードの上にある UILabel に現在入力されている単語を反映しようとして失敗しました (オートコレクトと考えてください)。これまでのところ、私が書いたコードは、カーソルが書かれているときではなく、カーソルがある位置から別の位置に移動したときに、カーソルの前の文を反映しています。私が達成しようとしているのは、ネイティブ キーボードの最初の自動修正ボックスとまったく同じです。私が間違っていることを誰か教えてくれませんか?

コード:

override func textWillChange(textInput: UITextInput) {

    var tokens = (self.textDocumentProxy as! UITextDocumentProxy).documentContextBeforeInput .componentsSeparatedByString(" ") as NSArray
    var lastWord = tokens.lastObject as! String
    println(lastWord)
    bannerView?.btn1.setTitle(lastWord, forState: .Normal)
 }

ボタンのタイトルを設定するために beforeCursor にスペース/ピリオド/コンマのいずれかが含まれている場合に条件を設定しようとしましたが、オート""コレクト機能を作成できるようにするために単語を取得する必要があるため、長期的には効率的ではありません。

編集:

カーソルの前に単語を取得する方法 (上記のコードを更新) を理解しましたが、各文字が追加されるたびにラベルを更新する方法はわかりません。func textWillChange(textInput: UITextInput)うまくいきません。それは私ではなく、彼女です。

ありがとう!

4

1 に答える 1

0

textDocumentProxy次のプロパティを使用する必要がありますUIInputViewController

let proxy = self.textDocumentProxy as! UITextDocumentProxy

入力されている単語を取得するには、次のようなものをお勧めします。

var lastWordTyped: String? {
        if let documentContext = proxy.documentContextBeforeInput as NSString? {
            let length = documentContext.length
            if length > 0 && NSCharacterSet.letterCharacterSet().characterIsMember(documentContext.characterAtIndex(length - 1)) {
                let components = documentContext.componentsSeparatedByCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet) as! [String]
                return components[components.endIndex - 1]
            }
        }
        return nil
    }
于 2015-07-29T13:51:48.313 に答える