2011-12-07 26 views
1

我想簡化一個我正在研究的項目,其中有八個UILabels,並且每隔一段時間我都會根據存儲的數據將這些標籤的背景顏色更改爲不同的顏色數組。在Xcode中創建UILabels數組

目前我的代碼運行一個for循環從0到7(佔八個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. 
} 

還是現在,我想想,也許我能做到這一切在一個很大的打擊,由此我並不需要通過運行循環八次,但我可以直接將我的backgroundcolordata數組的內容發送到我的UILabel數組中?

任何幫助或技巧在這裏將非常感激。

+0

您不需要圍繞代碼塊進行反引號。但是,您應該正確縮進它們。 –

+0

Thankyou fluchtpunkt用於修復我的代碼的格式。我認爲我通過四個空格縮進來正確地完成它,但它沒有正確顯示。 – BradSlattery

+0

簡單地將標籤存儲在初始化時創建的NSArray中有什麼問題? –

回答

3

首先,我只是將實際的UIColor對象存儲在backgroundColorData中,而不是顏色的名稱。然後將UILabel對象存儲在一個數組中。那麼整個代碼如下所示:

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

你可以通過名稱的標籤,它可以是有時一個有用的技術:

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

附:實例應該從小寫字母開始。即'label1',而不是'Label1'。