2012-03-08 5 views
0

多分簡単な質問ですが、正しい方法を理解できません。異なるUITextField間で検証コードを共有

私はUITextFieldです。私はいくつかのテキストフィールドを(彼らは同じコントローラどこに属していないので

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    // do validation here 
    // return YES or NO depending on previous validation 
} 

:私はこのテキストフィールド内に挿入されたテキストを検証する必要があるので、私は現在、次のようなUITextFieldDelegate方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)stringを使用しています検証が行われます)、テキストフィールドの検証コードを複製したくない場合、同様の検証を一元化するためのエレガントな方法をどのように達成できますか?サブクラス化が正しいかどうかはわかりませんが、この場合、同じアプリケーションのさまざまな部分で同じ委任方法(上記の方法)を使用する必要があります。

ありがとうございます。

答えて

2

これは、検証コードに必要な情報の量によって異なります。 textField:shouldChangeCharactersInRange:replacementString:の引数がすべてYESかNOを返すかどうかを判断する必要がある場合は、すべてのtextFieldに対して同じデリゲートを使用できます。

検証の判断を下すために以前の検証に関する情報を追跡して保存する必要がある場合、最も簡単な方法は、すべての状態をオブジェクトにパッケージ化し、それらのオブジェクトの配列をそれぞれ特定のUITextField。次に、textField:shouldChangeCharactersInRange:replacementString:に渡されたtextFieldに対応する状態を使用します。

+0

+1しかし、すべてのtextFields *に対して同じデリゲートを使うことができますか? * UITextFields *は、それらを含む異なるView Controllerに属することができます。ありがとうございました。 –

+0

私はあなたのことを何と呼んでいるのですか? 2つ以上のUITextFieldが異なるView Controllerに存在することはできませんが、同じデリゲートを持つ理由はありません。 – yuji

+0

私は参照してください。あなたは、* UITextFieldDelegate *を "実装"(採用)する異なるクラスオブジェクトを作成し、それが必要な各コントローラ内でインスタンス化することをお勧めします。次に、そのデリゲートをテキストフィールドの指定されたデリゲートとして設定します。そうですか? –

関連する問題