我有一个NSTextField,我想在插入点输入文本。我有一个不会产生错误的代码:
let str = "Abc"
myTextField.insertText(str)
[编辑] 当在字段中有123 | 45(" |"表示文本插入点)时,输出应为123Abc | 45.
不幸的是,因为它被弃用了所以不能工作。这是documentation。什么是替代品?
请注意,此问题适用于NSTextField而不是NSTextView,其中有一个问题:NSTextView's insertText method is deprecated in OS X v10.11. What is the replacement?
答案 0 :(得分:2)
获取文本字段所在窗口的字段编辑器,然后使用insertText(_:, replacementRange:)
:
let textfield = NSTextField()...
if let fieldEditor = textfield.window?.fieldEditor(false, for: textfield) as? NSTextView {
fieldEditor.insertText("abc", replacementRange: fieldEditor.selectedRange())
}
澄清:这要求文本字段具有输入焦点。如果某个其他字段具有输入焦点,则字段编辑器将在其中插入文本。
答案 1 :(得分:0)
如果您的textField具有焦点(是第一个响应者),则任何响应者方法(例如insertText:或inserText:replacementRange:)都可以完成工作。问题是当您要使textField成为第一响应者时(它将丢失/重置selectionRange)。
func appendText(_ text: String, for textField: NSTextField) {
makeFirstResponder(textField)
if let fieldEditor = (textField.currentEditor() as? NSTextInputClient) {
fieldEditor.insertText(text, replacementRange: fieldEditor.selectedRange())
}
}
func makeFirstResponder(_ textField: NSTextField) {
if textField.window?.firstResponder != textField.currentEditor() {
textField.window?.makeFirstResponder(textField)
if let length = textField.currentEditor()?.string.count {
textField.currentEditor()?.selectedRange = NSMakeRange(length, 0)
}
}
}