2011-12-07 4 views
1

私は8つのUILabelsがある場所で作業している小さなプロジェクトを合理化しようとしています。これらのラベルの背景色は、配列。XcodeでUILabelsの配列を作成する

現在、私のコードでは、0から7までのforループが実行されます(8つのUILabelsを説明するため)。 forループの中で、それはこのように、新しい背景色に対応するUILabelをループの点で最大であるものを数チェックし、修正します:

for (int y = 0; y < 8; y++) { 
    SEL mySelect = NSSelectorFromString([backgroundColorData objectAtIndex:y]); 
    UIColor* myUILabelColor = nil; 
    if ([UIColor respondsToSelector: mySelect]){ 
     myUILabelColor = [UIColor performSelector:mySelect]; 
    } 
    switch (y) { 
      Label0.backgroundColor = myUILabelColor; 
      break; 
     case 1: 
      Label1.backgroundColor = myUILabelColor; 
      break; 
     case 2: 
      Label2.backgroundColor = myUILabelColor; 
      break; 
     case 3: 
      Label3.backgroundColor = myUILabelColor; 
      break; 
     case 4: 
      Label4.backgroundColor = myUILabelColor; 
      break; 
     case 5: 
      Label5.backgroundColor = myUILabelColor; 
      break; 
     case 6: 
      Label6.backgroundColor = myUILabelColor; 
      break; 
     case 7: 
      Label7.backgroundColor = myUILabelColor; 
      break; 
    } 

は私が配置することにより、縮小コードを作成できるようにしたいと思いますこれら8 UILabels配列に、おそらくとして読み取ったコードを作成するには、次のとおりです。

for (int y = 0; y < 8; y++) { 
    SEL mySelect = NSSelectorFromString([backgroundColorData objectAtIndex:y]); 
    UIColor* myUILabelColor = nil; 
    if ([UIColor respondsToSelector: mySelect]){ 
     myUILabelColor = [UIColor performSelector:mySelect]; 
    } 
    // This piece of code would deal with modifying the backgroundColor of UILabel(y) within my array of UILabels. 
} 

それとも今、私はそれについて考えることを、私はを介して実行する必要はありませんそれによって、おそらく、私は一つの大きなヒットにそれをすべて行うことができますforループは8回ですが、私は自分のUILabel配列にbackgroundcolordata配列の内容を直接送ることができますか?

ここのヘルプやヒントは非常に高く評価されます。

+0

コードブロックの前後にバッククォートは必要ありません。ただし、正しくインデントする必要があります。 –

+0

私のコードの書式を修正していただきありがとうございますfluchtpunkt。私は4つのスペースでインデントして正しく作っていると思ったが、正しく出てこなかった。 – BradSlattery

+0

初期化時に一度作成するNSArrayにラベルを格納するだけで何が問題になりますか? –

答えて

3

まず、実際のUIColorオブジェクトを色の名前ではなくbackgroundColorDataに保存します。次に、UILabelオブジェクトを配列に格納します。そして、全体のコードは次のようになります。

NSString *name = [NSString stringWithFormat:@"Label%d", y]; 
UILabel *label = [self valueForKey:name]; 
backgroundColor = myUILabelColor = name; 

P.S.:

NSUInteger count = [self.labels count]; 
for (NSUInteger index = 0; index < count; ++index) { 
    UIColor *color = [self.backgroundColors objectAtIndex:index]; 
    [[self.labels objectAtIndex:index] setBackgroundColor:color]; 
} 
+0

大変ありがとうございました。昼休みに試してみましょう! – BradSlattery

+0

もう一度、このコードは(一度私のUILabelsを私の配列に追加する方法を考えれば)完全に機能しました。 – BradSlattery

3

あなたは時々有​​用な技術することができ名前でラベルを取得することができますインスタンスは実際には小文字で始まります。すなわち 'Label1'ではなく 'label1'である。