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的主要内容,如果未能解决你的问题,请参考以下文章
COCOA - 如何在NSTextfield中达到最大长度时,文本字段不允许输入文本?
按 Tab 时 NSTextField 没有注意到失去焦点?