Mac NSTextField 不会辞职 firstResponder

Posted

技术标签:

【中文标题】Mac NSTextField 不会辞职 firstResponder【英文标题】:Mac NSTextField won't resign firstResponder 【发布时间】:2018-06-22 15:25:41 【问题描述】:

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

这些我都试过了,都没有用

 sender.resignFirstResponder()

 sender.window?.makeFirstResponder(nil)

 InspectorWindowController.window?.makeFirstResponder(nil)

 AnotherWindowController.window?.becomeFirstResponder()

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

谢谢

【问题讨论】:

之前的重点是什么? 【参考方案1】:

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

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

【讨论】:

然后,如果您有两个字段,如果第一个字段处于焦点状态,则无法一键聚焦第二个字段:(【参考方案2】:

我需要在我的 SwiftUI macOS 应用程序中解雇第一响应者,在这里我发现以我需要的方式工作:

    func controlTextDidEndEditing(_ obj: Notification) 
      DispatchQueue.main.async 
        guard let window = self.textField.window else 
          return
        
        // https://***.com/questions/5999148/how-to-determine-whether-an-nssearchfield-nstextfield-has-input-focus
        // 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)
      
    

【讨论】:

以上是关于Mac NSTextField 不会辞职 firstResponder的主要内容,如果未能解决你的问题,请参考以下文章

NSTextField,在 Swift 中更改文本

在 Swift 中以编程方式创建 NSTextField

COCOA - 如何在NSTextfield中达到最大长度时,文本字段不允许输入文本?

按 T​​ab 时 NSTextField 没有注意到失去焦点?

NSTextField insertText 方法已被弃用,替代品是啥?

每天工作16个小时,如果辞职,会不会显得自己没责任心呢?