NSTextField insertText 方法已被弃用,替代品是啥?
Posted
技术标签:
【中文标题】NSTextField insertText 方法已被弃用,替代品是啥?【英文标题】:NSTextField insertText method is deprecated, what is the replacement?NSTextField insertText 方法已被弃用,替代品是什么? 【发布时间】:2017-07-04 02:23:26 【问题描述】:我有一个 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?
【问题讨论】:
您为什么不阅读***.com/questions/32787814/… 上发布的 cmets ? 嗨 El Tomato,实际上我阅读了 bhaller 的评论:“使用 NSTextField,您需要使用文本字段的字段编辑器,即 NSTextView”但老实说,我没有理解它。 @Cue ,当 myTextField 已经有44
时,您需要 insertText
的预期输出是多少?
嗨 RAJAMOHAN-S,当 i-beam 在 4 和 4 之间时,输出应该是 4Abc|4。
【参考方案1】:
获取文本字段所在窗口的字段编辑器,然后在其上使用insertText(_:, replacementRange:)
:
let textfield = NSTextField()...
if let fieldEditor = textfield.window?.fieldEditor(false, for: textfield) as? NSTextView
fieldEditor.insertText("abc", replacementRange: fieldEditor.selectedRange())
澄清一下:这要求文本字段具有输入焦点。如果某个其他字段具有输入焦点,则字段编辑器将在那里插入文本。
【讨论】:
【参考方案2】:如果您的 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)
【讨论】:
以上是关于NSTextField insertText 方法已被弃用,替代品是啥?的主要内容,如果未能解决你的问题,请参考以下文章
需要在 iMessage Extension 中的 insertText 方法上调用 didStartSending
需要在 iMessage Extension 中的 insertText 方法上调用 didStartSending
UITextView insertText 调用 shouldChangeTextInRange: replacementText: