2012-04-07 4 views
1

私はiOSアプリケーションを作成していますが、読みやすくするための質問が1つあります。複数のオブジェクトに複数のプロパティを適用する

たとえば、次のように非表示にするために多くの事項があります。 mytext1.hidden = YES; mytext2.hidden = YES; mytext3.hidden = YES; ...

これを書く方法はありますか。 (mytext1、mytext2、mytext3).hidden = YES;

ありがとう

答えて

2

あなたはこのようなセレクタを持つ配列を反復することができます

[theArray makeObjectsPerformSelector:@selector(methodName)]; 

... 1つのオブジェクトパラメータをとるバリエーションがあります。

[theArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    (UITextField *)obj.hidden = YES; 
}]; 

それはあなたの好みのためにあまりにも冗長だ場合、あなたが想定する配列クラスにメソッドを追加することができ、これは= YES、あなたはブロックを使用して列挙することができますので、隠し設定するには、しかし、スカラー型を処理しません例えば、コントロールのコレクション。これらは、単に列挙を隠すだろうが、呼び出し側は、このような単純なことができます

[myArrayOfControls hidden:YES]; 

簡単目に、右?これを実現するには、NSArrayメソッドのカスタムカテゴリを作成します。

// in Array+UIControlEnumeration.m 

@implementation NSArray (UIControlEnumeration) 

- (void)hidden:(BOOL)hidden { 

    for (UIControl *control in self) { 
     control.hidden = hidden; 
    } 
} 
+0

素晴らしい!私はそれが好きです !ありがとう! –

1

いいえ、Objective-Cにはそのような構文は存在しません。あなたが合成されたプロパティとして追加し、そのようにそれらをループ配列にそれらすべてを貼り付けるほうが良いと思います:

for (UITextField *textField in self.myArrayOfTextFields) { 
    [textField setHidden:YES]; 
} 
+0

@ダンの答えはもっと詳細です:) –

関連する問題