2016-10-24 9 views
0

私は私のNSViewControllerで変数を持っている:OS X nstextfield検証

dynamic var roll_rate:Double = 0.0 

私はNSTextFieldに添付:

enter image description here

モデルキーパスがエラーを示して、それが働いている:ときフィールドの値を変更しました。変数も変更されました。しかし、どういう意味ですか: Validates Immediately、フィールドの検証エラーを表示して確認するにはどうすればいいですか?

メソッドvalidateRoll_rateを実装しようとしましたが、値が変更されたときに呼び出されませんでした。

+0

@JoshuaNozzi私はNSViewControllerでこれを実装しようとしました – Arti

+0

@JoshuaNozziしかし、何の引数が必要なのか分かりません...迅速にいくつかの例がありますか? – Arti

+0

@JoshuaNozzi私はコードを持っていません。そして、問題のスクリーンショットを表示してください – Arti

答えて

2

ジェネリック溶液(バインディングの有無にかかわらず仕事)これに対処する一つの方法は、応答here

に基づいていますが基本的にはNSTextFieldcontrolTextDidChange(notification:)デリゲートメソッドを使用すると、あなたはそれであなたの検証コードを実装します。

明らか
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で選択し、

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"]) 
    } 
} 
(あなたの例ではTuning View Controller)結合が行われ、クラスに次のメソッドを実装しています

エラーがスローされると、エラーを通知する標準シートが表示され、変更をキャンセルまたは訂正するオプションが表示されます。

Interface BuilderでContinuously updates valueが選択されている場合は、テキストフィールドの各キーストロークに対して上記のメソッドが呼び出されます。それ以外の場合は、Enterを押すか、フォーカスを失うだけです。

注:Validates immediatelyの内容を含め、バインディングによる値の更新の仕組みについては、hereを参照してください。

+0

nstextfieldの検証ではないtextView –

+0

正解、私はそれを反映するために私の応答を編集しました。 –

+0

@LeoDabusはこのようなものは何ですか? https://github.com/jpotts18/SwiftValidator – Arti