当 NSPopover 打开时,macOS NSTextfield 失去焦点

macOS NSTextfield looses focus when NSPopover open

我正在尝试在我的 macOS 应用程序中进行搜索自动完成:

我有一个带有 NSTextField 的 window。当值发生变化时,我会显示一个包含 NSOutlineView 的 NSPopover,并且当用户输入文本时列表会更新。 然后用户可以在 NSOutlineView 中 select 结果。

但是,如果我启用 NSOutlineView 以便能够单击结果,则 NSTextField 在 NSPopover 打开时失去焦点。 如果我将 NSOutlineView 的 isEnabled 设置为 false,NSTextField 会保持焦点,但我无法在列表中 select 结果。

你有什么想法可以在不禁用 NSOutlineView 的情况下继续关注 NSTextField 吗?

谢谢。

我找到了解决办法:

在 NSPopover.show() 之前,我存储当前文本字段 selected 范围:

let range = textField.currentEditor()?.selectedRange

之后:

textField.selectText(self)
textField.currentEditor()?.selectedRange = range ?? NSMakeRange(0, 0)

如果我在未设置 selected 范围的情况下调用 selectText(),它将 select 所有文本。 此外,保存 selected 范围保持光标位置。