我设法找到了以下解决方法:
我创建了一个实现UITextDocumentProxy协议的类,该协议写入文本字段,并将其设置为键盘视图控制器中的附加代理:
class ProxyWrapper: NSObject, UITextDocumentProxy {
private let textField: UITextField
init(textField: UITextField) {
self.textField = textField
}
var documentContextBeforeInput: String? {
get {
return textField.text
}
}
var documentContextAfterInput: String? {
get {
return ""
}
}
func adjustTextPositionByCharacterOffset(offset: Int) {}
func insertText(text: String) {
let ntext = text.stringByReplacingOccurrencesOfString("\n", withString: "")
textField.text = (textField.text ?? "") + ntext
}
func deleteBackward() {
if let text = textField.text {
textField.text = text.substringToIndex(text.endIndex.advancedBy(-1))
}
}
func hasText() -> Bool {
return textField.hasText()
}
}
正如您所看到的,我只实现了一个非常简单的类(文本输入/删除仅在最后),因为我完全禁用了文本字段的用户交互,所以永远不会弹出“真正的”键盘。此外,我不允许插入换行符。
它可能看起来有点老套,可能有更好的解决方案(请随时告诉我),但这很有效,因此我使用了它。