我的应用程序有一个带有两个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)
}
}