【问题标题】:Visual glitches with custom field editor自定义字段编辑器的视觉故障
【发布时间】:2020-02-12 12:55:24
【问题描述】:

我有一个 NSTextField,我希望自动完成始终对字段的全部内容而不是当前单词进行操作。

我正在尝试通过在窗口委托中使用windowWillReturnFieldEditor() 来返回NSTextView 子类,我可以在其中返回rangeForUserCompletion 中的全文范围。

这基本上是有效的,除了一些绘图问题。没有绘制文本字段的焦点环,并且该字段的旧文本覆盖在当前输入的内容上。

我需要在NSTextView 上进行一些额外的配置以使其作为字段编辑器正常工作吗?我认为另一种方法是自定义构成单词边界的内容,但我还没有找到如何做到这一点。

相关代码:

extension MyWindowController: NSWindowDelegate
{
  func windowWillReturnFieldEditor(_ sender: NSWindow, to client: Any?) -> Any?
  {
    if let clientField = client as? NSTextField,
       clientField === myTextField {
      let editor = FullReplacementTextView()

      editor.isFieldEditor = true
      return editor
    }
    else {
      return nil
    }
  }
}

class FullReplacementTextView: NSTextView
{
  override var rangeForUserCompletion: NSRange
  {
    return self.string.fullNSRange // Extension method that returns the full string range
  }
}

【问题讨论】:

    标签: macos cocoa nstextfield nstextview


    【解决方案1】:

    看起来答案是您必须每次都返回相同的实例,而不是在每次回调时创建一个新实例。缓存一个实例并返回它解决了这个问题。

    现在事实证明,如果您键入一个非字母数字字符,自动完成逻辑会将其视为“我想接受所选完成并输入此字符”,即使这是完成中的下一个字符。但我将把它作为一个单独的问题来解决。

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      相关资源
      最近更新 更多