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 回答