0

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

问题

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

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

1 回答 1

1

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

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

@IBAction func okAction(_ sender: Any) {
    if let window = view.window,
        window.makeFirstResponder(nil) {
        dismiss(self)
    }
}
于 2020-12-09T23:00:50.933 回答