2016-10-24 5 views
0

У меня есть переменная в моем NSViewController:OS X nstextfield проверка

dynamic var roll_rate:Double = 0.0 

я придаю его к моему NSTextField:

enter image description here

Модель Key Path показывает ошибку, но она работает: Когда Я изменил значение в поле, переменная тоже изменилась. Но что означает: Validates Immediately и как я могу показать и проверить ошибки проверки для поля.

Я попытался реализовать метод validateRoll_rate, но он не вызвал, когда значение изменилось.

+0

@JoshuaNozzi я попытался реализовать в моем NSViewController – Arti

+0

@JoshuaNozzi, но я не понимаю, какие аргументы мне нужен ... есть несколько примеров на быстром – Arti

+0

@JoshuaNozzi я не код, я сделал все, с помощью пользовательского интерфейса. И показать скриншот в вопросе – Arti

ответ

2

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.

+0

nstextfield validation not textView –

+0

Правильно, я отредактировал свой ответ, чтобы его отразить. –

+0

@ LeoDabus - это что-то вроде этого? https://github.com/jpotts18/SwiftValidator – Arti

Смежные вопросы