我正在使用UITableView,它显示每个条目的价格范围值。 我正在使用循环来显示价格范围。我在哪里搜索我的mystake,因为当我上下滚动并且每个细胞都被显示,隐藏并再次重新显示时,叠加了“美元”的图像并且显得难看,请看图片。
我如何设置init我的单元格:
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
我在思考,而不是在每个滚动单元格上添加美元图像视图,我想知道如何避免这种情况。如果有人能给我一个更好的方法吗?
答案 0 :(得分: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++;
}
答案 1 :(得分:0)
每次在另一个上面添加一个img时,不应该初始化一个新的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作为变量
答案 2 :(得分: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++;
}