繁体   English   中英

Objective-C UITableView单元格图像叠加

[英]Objective-c UITableView Cell image superimpose

我正在UITableView上工作,谁显示每个条目的价格范围值。 我正在使用循环显示价格范围。 我搜索我的错是在哪里,因为当我上下滚动并隐藏每个已显示的单元格并再次重新显示时,它们会叠加“美元”的图像,并且看起来很丑。

在此处输入图片说明

我如何设置初始化单元格:

 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,我想知道如何避免这种情况。 是否有人可以建议我更好的方法?

因为你用

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++;
}

每次添加一个新的img时,都不要初始化它。 如果initWith ..代码不太长,则应为image创建一个属性,并调用一个方法来设置或设置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作为变量

我找到了这个解决方案,并且效果很好,我只是在添加新的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++;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM