2012-06-03 38 views
0

嘗試清理一些代碼並遇到問題。我有一個1-5的排名出現在uitableviewcell中。該單元格有5個圖像視圖指向星形圖像。有一個starYellow.png和starGrey.png。如果排名是3/5,則單元格應將star1,star2,star3設置爲starYellow.png和star4,star5以starGrey.png。在循環中動態引用propertyName + 1

我遇到了引用屬性星%i的問題,其中我是循環1-5的迭代。我無法弄清楚如何做[cell setValue:starYellow forKey:[NSString stringWithFormat:@「star%i.image」,i]];

這是我想對代碼進行優化..

if (book.ratingOnline) { 
[cell.ratingView.layer setOpacity:1.0f]; 
    for (int i = 1; i <= 5; i++) {    
     if (i == 1) { 
      if (book.ratingOnline >= i) { [cell.star1 setImage:[UIImage imageNamed:@"starYellow.png"]]; } 
      else { [cell.star1 setImage:[UIImage imageNamed:@"starGrey.png"]]; } 
     } 
     else if (i == 2) { 
      if (book.ratingOnline >= i) { [cell.star2 setImage:[UIImage imageNamed:@"starYellow.png"]]; } 
      else { [cell.star2 setImage:[UIImage imageNamed:@"starGrey.png"]]; } 
     } 
     else if (i == 3) { 
      if (book.ratingOnline >= i) { [cell.star3 setImage:[UIImage imageNamed:@"starYellow.png"]]; } 
      else { [cell.star3 setImage:[UIImage imageNamed:@"starGrey.png"]]; } 
     } 
     else if (i == 4) { 
      if (book.ratingOnline >= i) { [cell.star4 setImage:[UIImage imageNamed:@"starYellow.png"]]; } 
      else { [cell.star4 setImage:[UIImage imageNamed:@"starGrey.png"]]; } 
     } 
     else if (i == 5) { 
      if (book.ratingOnline >= i) { [cell.star5 setImage:[UIImage imageNamed:@"starYellow.png"]]; } 
      else { [cell.star5 setImage:[UIImage imageNamed:@"starGrey.png"]]; } 
     } 
    } 
} 

感謝。

回答

0

添加所有的星星在一個NSArray,

在Cell.h

NSArray *stars; 

我們引用任何啓動,你可以做

for (int i = 1; i <= 5; i++) {    
    UIImageView *star = [cell.stars objectAtIndex:i]; 
    //set the image to the star 
} 
+0

也做到了,謝謝!我不知道你可以參考這樣的屬性。改變了objectAtIndex:我到i-1來處理循環的正確邊界,並且它實現了這個技巧。 – tknp