【问题标题】:macOS NSTextfield looses focus when NSPopover open当 NSPopover 打开时,macOS NSTextfield 失去焦点
【发布时间】:2017-11-30 11:25:16
【问题描述】:

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

我有一个带有 NSTextField 的窗口。当值更改时,我会显示一个包含 NSOutlineView 的 NSPopover,并且列表会在用户输入文本时更新。 然后用户可以在 NSOutlineView 中选择一个结果。

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

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

谢谢。

【问题讨论】:

  • 实验:打开大纲视图的refusesFirstResponder。这是 IB 中的一个复选框。
  • 我已经尝试过了,但它并没有改变任何东西......

标签: macos focus nstextfield nsoutlineview nspopover


【解决方案1】:

我找到了解决办法:

在 NSPopover.show() 之前,我存储了当前 textField 选择的范围:

let range = textField.currentEditor()?.selectedRange

之后:

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

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

【讨论】:

  • becomeFirstResponder 的文档说“永远不要直接调用这个方法。”。
  • @Willeke 好的,我现在改用 textField.selectText(self)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 2011-05-25
  • 2015-02-04
相关资源
最近更新 更多