2011-04-02 19 views
0

私のプログラムには、バインディングを使ってモデルオブジェクトからfileNameを表すテキストフィールドがあります。私はこのtextFieldを使用して新しいfileNameを入力することができます。そして、ユーザがEnterを押した後に、モデルオブジェクトにメッセージを送信して、fileNameの値がtextFieldで変更されているかどうかを確認してください。使用されるべきである。それがtrueを返す場合、モデルオブジェクトに新しい値を適用する必要があります。そうでない場合、textFieldの値は初期値に元に戻す必要があります。TextFieldでのテキストの妥当性確認

誰かがどのように実装できるか知っていますか?私は自分の価値を検証することができますが、textFieldを初期値に更新することはできません。モデルオブジェクトの値を変更する場合、texField refreshはKVCに準拠した単一のメソッドを使用する必要があります。このような動作を実装する方法はわかりません。

ご協力いただければ幸いです。

+0

無効な文字をチェックするfileNameをチェックするメソッドや、ファイル名が一意であることを確認するメソッドはありますか?たとえば、重複はありません。 –

+0

名前が一意であるかどうかを確認しています... – BartoNaz

答えて

1

これは私にとって素晴らしいUXのようには聞こえません。ユーザーとしては、テキストフィールドに単純な入力ミスをした場合、入力したテキストが完全に消えてしまうことがわかりました。何が間違っていたか、そしてユーザーがそれをどのように修正できるかを示すメッセージを表示すると、多くの場合、になるでしょう。それにもかかわらず...

私はあなたがテキストフィールドデリゲートを設定するべきだと思います。デリゲートに、入力された最後の有効な文字列を保持する変数を保持させます。次にtextFieldShouldEndEditing:で、妥当性をチェックし、チェックが合格しない場合は、テキストフィールドの値をその変数に設定し、NOを返します。それが合格した場合は、新しい有効な文字列を保持するように変数を変更し、YESを返します。

+0

エラーメッセージの表示は正しいですが、それは詳細です。私はバインディングの中にこのチェックを入れておくだけでどうしたのか分かりませんでした。デリゲートについてのアイデアは良いと思うが、私はあまりよく知らない。実際には、textFieldの値は配列内のオブジェクトにバインドされるため、textFieldはarrayController.selection.fileNameにバインドされます。デリゲートを使用すると、プログラムでバインドを調整することができますが、正しく理解できますか? – BartoNaz

+0

デリゲートメソッドをバインディングと組み合わせても問題ありません。一般に、デリゲートメソッドは、サブクラス化を気にせずにクラス(多くの場合、UI要素)の動作をわずかにカスタマイズする方法です。アイデアは、オブジェクトが代理人にさまざまなアクションの許可やフィードバックを求めるので、たとえば入力が役に立たない場合にユーザーがテキストフィールドからタブアウトしないようにすることができます。 –

+0

それは興味深いね。私は代理人がそれを使うことについてもっと学びます。ありがとうございました... – BartoNaz