Mac NSTextField 不会退出 firstResponder

Mac NSTextField won't resign firstResponder

我有一个带有一些 NSTextFields 的 window。当我单击其中一个并编辑值并按 return 时,我希望焦点回到之前的状态。我不希望文本字段周围出现蓝色环,也不希望进一步击键到该文本字段。我本以为这会自动发生。

我试过这些,none 有效

 sender.resignFirstResponder()

 sender.window?.makeFirstResponder(nil)

 InspectorWindowController.window?.makeFirstResponder(nil)

 AnotherWindowController.window?.becomeFirstResponder()

我在与文本字段关联的 IBAction 结束时执行这些操作。也许我必须从其他地方做?

谢谢

我想通了。我猜发送的动作发生在另一个线程上。所以你必须使用 Dispatch async 调用 makeFirstResponder。

DispatchQueue.main.async { //omg
    sender.window?.makeFirstResponder(nil)
}

我需要在我的 SwiftUI macOS 应用程序中关闭第一响应者,这里是我发现以我需要的方式工作的东西:

    func controlTextDidEndEditing(_ obj: Notification) {
      DispatchQueue.main.async {
        guard let window = self.textField.window else {
          return
        }
        // 
        // We need to make sure that our text field is still first responder.
        guard let textView = window.firstResponder as? NSTextView,
              textView.delegate === self.textField else {
          return
        }
        
        window.makeFirstResponder(nil)
      }
    }