如何在模式对话框中验证NSTextField内容



我的应用程序有一个带有两个NSTextFields的模式对话框;取消";以及";OK";按钮。第一个文本字段有一个数字格式化程序,以确保您只能输入整数。

当用户试图在第一个文本字段中输入无效数据时,我想向他们显示一个警告。这应该在文本字段失去焦点时显示,或者如果他们试图点击模态的";OK";按钮

我尝试过的:

为文本字段设置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
}
}

问题

上面的代码只是一种作品;当有无效数据时,当文本字段失去焦点时,它确实会显示有用的警告,但:

  • 然后清空文本字段的内容;我希望无效数据保留在字段中,以便用户进行更正
  • 单击"确定"按钮不会触发字段的格式设置,因此不会显示警报

单击"确定"按钮不会触发字段的格式设置,因此不会显示警报。

调用makeFirstResponder(nil)强制格式化内容。如果文本字段拒绝放弃其第一响应者状态,则makeFirstResponder返回false

@IBAction func okAction(_ sender: Any) {
if let window = view.window,
window.makeFirstResponder(nil) {
dismiss(self)
}
}

最新更新