NSTextField insertText 方法已弃用,替代方法是什么?
NSTextField insertText method is deprecated, what is the replacement?
我有一个 NSTextField,我想在其中的插入点输入文本。我有一个不会产生错误的代码:
let str = "Abc"
myTextField.insertText(str)
[编辑]
当字段中有123|45(“|”代表文本插入点)时,输出应该是123Abc|45.
不幸的是,它已被弃用,因此无法使用。这里是documentation。什么是替代品?
请注意,这个问题是针对 NSTextField 而不是 NSTextView,这里有一个问题:
获取文本字段所在 window 的字段编辑器,然后在其上使用 insertText(_:, replacementRange:)
:
let textfield = NSTextField()...
if let fieldEditor = textfield.window?.fieldEditor(false, for: textfield) as? NSTextView {
fieldEditor.insertText("abc", replacementRange: fieldEditor.selectedRange())
}
澄清一下:这需要文本字段具有输入焦点。如果其他某个字段具有输入焦点,则字段编辑器将在此处插入文本。
如果您的 textField 有焦点(是第一响应者),那么任何响应者方法,如 insertText: 或 inserText:replacementRange: 都可以完成这项工作。问题是当你想让 textField 成为第一响应者时(它将 lose/reset 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)
}
}
}
我有一个 NSTextField,我想在其中的插入点输入文本。我有一个不会产生错误的代码:
let str = "Abc"
myTextField.insertText(str)
[编辑] 当字段中有123|45(“|”代表文本插入点)时,输出应该是123Abc|45.
不幸的是,它已被弃用,因此无法使用。这里是documentation。什么是替代品?
请注意,这个问题是针对 NSTextField 而不是 NSTextView,这里有一个问题:
获取文本字段所在 window 的字段编辑器,然后在其上使用 insertText(_:, replacementRange:)
:
let textfield = NSTextField()...
if let fieldEditor = textfield.window?.fieldEditor(false, for: textfield) as? NSTextView {
fieldEditor.insertText("abc", replacementRange: fieldEditor.selectedRange())
}
澄清一下:这需要文本字段具有输入焦点。如果其他某个字段具有输入焦点,则字段编辑器将在此处插入文本。
如果您的 textField 有焦点(是第一响应者),那么任何响应者方法,如 insertText: 或 inserText:replacementRange: 都可以完成这项工作。问题是当你想让 textField 成为第一响应者时(它将 lose/reset 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)
}
}
}