如何在模态对话框中验证 NSTextField 内容
How to validate NSTextField content in a modal dialog
我的应用有一个模态对话框,上面有两个 NSTextField,以及“取消”和“确定”按钮。第一个文本字段有一个数字格式化程序,以确保您只能输入整数。
我想在用户试图在第一个文本字段中输入无效数据时向他们显示警告。这应该在文本字段失去焦点时显示,或者如果他们试图单击模式的“确定”按钮。
我尝试过的:
正在为文本字段设置 NSTextFieldDelegate
:
extension ViewController: NSTextFieldDelegate {
func control(_ control: NSControl, didFailToFormatString string: String, errorDescription error: String?) -> Bool {
let alert = NSAlert()
alert.messageText = "Invalid Number"
alert.informativeText = error ?? "You must enter a number."
alert.runModal()
return true
}
}
问题
以上代码仅能正常工作;当存在无效数据时,它会在文本字段失去焦点时显示有用的警报但是:
- 然后清空文本字段的内容;我希望无效数据保留在字段中,以便用户可以更正它
- 单击“确定”按钮不会触发字段的格式设置,因此不会显示警告。
clicking the OK button does not trigger the field's formatting and thus the alert does not show.
调用makeFirstResponder(nil)
强制格式化内容。 makeFirstResponder
returns false
如果文本字段拒绝放弃其第一响应者状态。
@IBAction func okAction(_ sender: Any) {
if let window = view.window,
window.makeFirstResponder(nil) {
dismiss(self)
}
}
我的应用有一个模态对话框,上面有两个 NSTextField,以及“取消”和“确定”按钮。第一个文本字段有一个数字格式化程序,以确保您只能输入整数。
我想在用户试图在第一个文本字段中输入无效数据时向他们显示警告。这应该在文本字段失去焦点时显示,或者如果他们试图单击模式的“确定”按钮。
我尝试过的:
正在为文本字段设置 NSTextFieldDelegate
:
extension ViewController: NSTextFieldDelegate {
func control(_ control: NSControl, didFailToFormatString string: String, errorDescription error: String?) -> Bool {
let alert = NSAlert()
alert.messageText = "Invalid Number"
alert.informativeText = error ?? "You must enter a number."
alert.runModal()
return true
}
}
问题
以上代码仅能正常工作;当存在无效数据时,它会在文本字段失去焦点时显示有用的警报但是:
- 然后清空文本字段的内容;我希望无效数据保留在字段中,以便用户可以更正它
- 单击“确定”按钮不会触发字段的格式设置,因此不会显示警告。
clicking the OK button does not trigger the field's formatting and thus the alert does not show.
调用makeFirstResponder(nil)
强制格式化内容。 makeFirstResponder
returns false
如果文本字段拒绝放弃其第一响应者状态。
@IBAction func okAction(_ sender: Any) {
if let window = view.window,
window.makeFirstResponder(nil) {
dismiss(self)
}
}