【问题标题】:How to find next firstResponder on controlTextDidEndEditing in NSTextField如何在 NSTextField 中的 controlTextDidEndEditing 上找到下一个 firstResponder
【发布时间】:2017-05-15 18:25:05
【问题描述】:

我有一个自定义的NSTextField,我需要知道在controlTextDidEndEditing 被触发时/之后哪个控件是“活动的”。调用 controlTextDidEndEditing 时,窗口的 F​​irstResponder 还在 TextField 上。

【问题讨论】:

  • 您想知道结束编辑的控件还是接下来将变为活动的控件?下一个控件取决于事件(tab、shift-tab、enter、mousedown、箭头)、用户首选项(全键盘访问)和其他条件。
  • 下一个,正如我所说,它是一个自定义控件,它将在多个窗口中实现……我想保持它的通用性。我只需要确保新的第一响应者不是某个控件
  • 这是一个不同的问题。你想禁用这个特定的控件吗?也许你应该解释一下你想要完成什么。
  • 我尝试创建一个自定义组合框,因为 NSComboBox 非常有限,我需要某些功能。所以我有一个 NSTextField 和一个 NSTableView(在 NSScrollView 内)。在 controlTextDidEndEditing 我尝试关闭 tableView(如果打开)......这工作正常,除了在 TableView 中完成某些事情的情况。因此,在 TextField 不再是 FirstResponder 之后,我需要检查什么是 firstResponder 控件。
  • 我目前所做的是我有一个 iVar lostFocus 始终是 true 除了调用 TableView 的 didChangeSelection 的 action/doubleAction-Selector 的情况,然后它被设置为假。在controlTextDidEndEditing 我检查lostFocus 如果它是真的,那么tableView 将被关闭,否则它保持打开状态。

标签: macos cocoa nstextfield first-responder


【解决方案1】:

我通过通知 userInfo 中的键 _NSFirstResponderReplacingFieldEditor 可访问的对象解决了这个问题。

【讨论】:

  • 我不建议使用无证密钥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多