1

私の問題は、多くの UITextField と UITextField に入力されたすべてのデータが私の xyz クラスに格納されているクラスを含む画面があることです。現在、スイッチケースを使用してUITextFieldをクラスプロパティにマッピングしていますが、これは非常に恐ろしいことであり、検証が複雑になることは言うまでもありません。クラス プロパティを UITextField にマップし、スイッチ ケースを取り除く方法はありますか。助けてください。

4

2 に答える 2

1

各テキスト フィールドに 0 から n までのタグを付けます。次に、配列を使用して、ビュー タグをアウトレットプロパティ名にマップできます。次に例を示します。

@interface MyClass

@property ( nonatomic, retain ) id property1 ;
@property ( nonatomic, retain ) id property2 ;
@property ( nonatomic, retain ) id property3 ;

@end

次に、-(void)textFieldDidChangeText:(NSNotification*)note(またはテキストフィールドの変更を処理している場所で)メソッドでこれを行います:

static NSString * fieldNames[] = { @"property1", @"property2", @"property3" } ;
UITextField * field = [ note object ] ;
[ self setValue:field.text forKey:fieldNames[ field.tag ] ] ;

たぶん、他の誰かがより確実な解決策で解決できるかもしれません。HTH

于 2011-05-13T08:14:11.953 に答える
1

UITextFieldDelegateプロトコルを採用し、文字列を含むクラスを考えることができます。

@interface XXBoundString: NSObject <UITextFieldDelegate> {
    NSString *string;

    ... // Other necessary ivars
}

... // string methods that you want exposed
@end

このようにして、すべてのコードをこのオブジェクトに入れることができます。検証方法がテキスト フィールドごとに異なる場合は、コードをブロック オブジェクトとして受け入れることができます。

-(void)setValidationBlock:(ValidationBlock)block;

NSStringここでは、 s をオブジェクトに置き換えXXBoundString、それぞれを特定の UITextField のデリゲートに設定します。

于 2011-05-13T09:49:06.690 に答える