Generic решения (работа с или без привязки) Одним из способов борьбы с этим на основе ответ here
В основном используется метод controlTextDidChange(notification:)
делегата NSTextField
и вы реализуете свой код проверки в нем.
override func controlTextDidChange (notification: NSNotification) {
guard let textField = notification.object as? NSTextField else { return }
// test here, replace the dummy test below with something useful
if textField.stringValue != "expected value" {
myTextFieldOutlet.backgroundColor = NSColor.red
myErrorLabelOutlet.stringValue = "Error !!!"
} else {
// everything OK, reset the background color and error label to the normal state
....
}
}
Очевидно myTextFieldOutlet
является выходом связан с вашим текстовым полем и myErrorLabelOutlet
является выходом к удобно помещенной этикетке используется для отображения ошибок (пустых, если не должны быть представлены без ошибок)
Привязки ориентированного решения Ве уверен Validates immediately
выбран в Interface Builder и реализовать следующий метод в классе, где производится связывание (Tuning View Controller
в вашем примере)
override func validateValue(_ ioValue: AutoreleasingUnsafeMutablePointer<AnyObject?>, forKey inKey: String) throws {
// test here, replace the dummy test below with something useful
if roll_rate > 10.0 {
throw NSError(domain: "your-domain", code: 100, userInfo: [NSLocalizedDescriptionKey: "Error, roll rate too high"])
}
}
Когда ошибка будет сброшена, пользователю будет представлен стандартный лист, объявляющий об ошибке, и возможность отменить изменение или исправить его.
Если в интерфейсном построителе выбрано Continuously updates value
, то для каждого нажатия клавиши в текстовом поле будет вызываться метод, иначе только после нажатия Enter
или потери фокуса.
Примечание: для полного понимания того, как обновляются значения с помощью привязок, включая то, что делает Validates immediately
, см. Документы here.
@JoshuaNozzi я попытался реализовать в моем NSViewController – Arti
@JoshuaNozzi, но я не понимаю, какие аргументы мне нужен ... есть несколько примеров на быстром – Arti
@JoshuaNozzi я не код, я сделал все, с помощью пользовательского интерфейса. И показать скриншот в вопросе – Arti