如何获取当前正在输入的单词?
How to get the current word being typed?
我正在为 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 包含一个 space/period/comma 将按钮标题设置为 ""
但这在我需要的长 运行 中效率不高获取单词以便能够进行自动更正功能。
编辑:
我已经弄清楚如何获取光标前的单词(更新了上面的代码),但不知道如何在添加每个字母时更新标签。 func textWillChange(textInput: UITextInput)
没有成功。不是我是她。
谢谢!
您应该使用 UIInputViewController
的 textDocumentProxy
属性:
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
}
我正在为 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 包含一个 space/period/comma 将按钮标题设置为 ""
但这在我需要的长 运行 中效率不高获取单词以便能够进行自动更正功能。
编辑:
我已经弄清楚如何获取光标前的单词(更新了上面的代码),但不知道如何在添加每个字母时更新标签。 func textWillChange(textInput: UITextInput)
没有成功。不是我是她。
谢谢!
您应该使用 UIInputViewController
的 textDocumentProxy
属性:
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
}