当 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 范围保持光标位置。
我正在尝试在我的 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 范围保持光标位置。