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)
}
}
我有一个带有一些 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)
}
}