【问题标题】: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?

【问题讨论】:

  • 您为什么不阅读stackoverflow.com/questions/32787814/… 上发布的 cmets ?
  • 嗨 El Tomato,实际上我阅读了 bhaller 的评论:“使用 NSTextField,您需要使用文本字段的字段编辑器,即 NSTextView”但老实说,我没有理解它。
  • @Cue ,当 myTextField 已经有 44 时,您需要 insertText 的预期输出是多少?
  • 嗨 RAJAMOHAN-S,当 i-beam 在 4 和 4 之间时,输出应该是 4Abc|4。

标签: swift cocoa nstextfield


【解决方案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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-25
      • 2022-09-23
      • 2023-03-30
      • 2021-05-26
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多