2014-11-21 76 views
0

我正在處理UITableView誰顯示每個價格範圍值條目。 我使用循環來顯示價格範圍。我在哪裏尋找我的靈魂,因爲當我上下滾動時,每個已經顯示,隱藏並重新顯示的細胞都疊加了「美元」的圖像,而且它很醜,看到圖片。Objective-c UITableView單元格圖像疊加

enter image description here

我如何設置初始化我的手機:

PoiAllTableCell *cell = (PoiAllTableCell *)[tableView dequeueReusableCellWithIdentifier:@"PoiAllCell" forIndexPath:indexPath]; 

我使用此代碼顯示美元的ImageView:

for (int i =0; i < 4;) { 
     PriceRangeImageView *img = [PriceRangeImageView new]; 


     if (i < _currentPoi.priceRange) { 
      [img initWithXMultiple:i withColor:_appDelegate.mainColor]; 
     } 
     else{ 
      [img initWithXMultiple:i withColor:_appDelegate.blackColor]; 
     } 

     [cell.priceRangeView addSubview:img]; 
     i++; 
    } 

我如何顯示圖像:

#import "PriceRangeImageView.h" 

@implementation PriceRangeImageView 


- (void)initWithXMultiple:(int)xMultiple withColor:(UIColor *)color{ 
    if (self.image == nil) { 

     self.frame = CGRectMake(xMultiple*16,0,16,16); 
     self.image = [UIImage imageNamed:@"dollar_icon"]; 
     self.image = [self.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

     self.tintColor = color; 
    } 
} 

@end 

這裏是我的手機:

#import <UIKit/UIKit.h> 
#import "PriceRangeView.h" 

@interface PoiAllTableCell : UITableViewCell 
@property (weak, nonatomic) IBOutlet UILabel *poiTitleLabel; 
@property (weak,nonatomic) IBOutlet UIImageView *poiImageView; 
@property (weak, nonatomic) IBOutlet UILabel *distanceLabel; 
@property (weak, nonatomic) IBOutlet UILabel *kmStaticLabel; 

@property (weak, nonatomic) IBOutlet UILabel *separatorLabel; 
@property (weak, nonatomic) IBOutlet UILabel *categoriesLabel; 

@property (weak, nonatomic) IBOutlet UIView *priceRangeView; 


@property (nonatomic) CGSize distanceLabelSize; 
@property (nonatomic) CGFloat distanceLabelWidth; 

@end 

我在想比在每個滾動細胞的細胞兌美元imageview的,我想知道如何避免這種情況。如果有人可以建議我一個更好的方法?

+0

試試這個@Barzull [cell.contentView addSubview:IMG] http://stackoverflow.com/a/26881504/3767017 – 2014-11-21 09:26:23

+0

感謝,但cell.priceRangeView是一個UIView,我試圖用你的建議,但它再次疊加。 – Jeffrey 2014-11-21 09:37:20

+0

只是一個建議,當你製作自定義單元格併爲其製作UITableViewCell子類時,爲什麼你要爲其單元格數據創建另一個類,則應該將所有數據填充到同一個子類中 (因爲我明白看到您的代碼) – 2014-11-21 11:50:56

回答

0

,因爲你使用

UITableViewCell *cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:identifier]; 

所以電池重複使用,它已經有一個ImageView的。因此,使用此代碼添加圖像視圖

for (int i =0; i < 4;) { 
    [[cell.priceRangeView viewWithTag:i] removeFromSuperview]; 
    PriceRangeImageView *img = [PriceRangeImageView new]; 

    img.tag = i; 
    if (i < _currentPoi.priceRange) { 
     [img initWithXMultiple:i withColor:_appDelegate.mainColor]; 
    } 
    else{ 
     [img initWithXMultiple:i withColor:_appDelegate.blackColor]; 
    } 

    [cell.priceRangeView addSubview:img]; 
    i++; 
} 
+0

謝謝,但它不起作用,我的美元的imageview不以這種方式顯示。 – Jeffrey 2014-11-21 09:16:57

0

您不應該在每次添加一個新的img的時候初始化一個新的img。如果initWith ..代碼不是太長,您應該爲圖像創建一個屬性並調用一個方法來在setter中設置或設置。但是,不要創建一個新的實例加班,它會熄滅屏幕。

@property(strong,nonatomic)PriceRangeImageView* img; 


-(PriceRangeImageView*)img{ 
     if(!_img){ 
      _img = PriceRangeImageView *img = [PriceRangeImageView new]; 
     } 

    //do what you need to do to prepare it here.. omg = some image or whatever 

    return img; 


    } 

就用self.img爲您的變量

0

,我發現這個解決方案和它的作品很好,我探微添加新的ImageView之前取消對我的priceRangeView所有子視圖。

[cell.priceRangeView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

    //affichage priceRange 
    for (int i =0; i < 4;) { 

     PriceRangeImageView *img = [PriceRangeImageView new]; 

     if (i < _currentPoi.priceRange) { 
      [img initWithXMultiple:i withColor:_appDelegate.mainColor]; 
     } 
     else{ 
      [img initWithXMultiple:i withColor:_appDelegate.blackColor]; 
     } 

     [cell.priceRangeView addSubview:img]; 
     i++; 
    } 
+0

我也說過相同 – BHASKAR 2014-11-21 10:15:10

+0

可能,但我不明白你的做事方式;)無論如何,謝謝 – Jeffrey 2014-11-21 11:10:40

+0

我只是設置imageview的標籤,當新的單元格調用時,我通過這個標籤刪除舊的imageview。但是你刪除了所有的子視圖 – BHASKAR 2014-11-21 11:14:22