我有一个UITableView,我已经将UITableViewCell(称为CustomCell)子类化,因此它有几个标签和一个UI
ImageView.
只有某些单元格才能显示图像.这是我的tableView代码:cellForRowAtIndexPath ::
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { Match *aMatch = [[appDelegate.matchByDate objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; static NSString *CellIdentifier = @"Cell"; CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; } cell.homeLabel.text = aMatch.homeTeam; cell.awayLabel.text = aMatch.awayTeam; cell.timeLabel.text = aMatch.koTime; cell.tournamentLabel.text = aMatch.tournament; NSString *tempString = [appDelegate.teamlogos objectForKey:[aMatch homeTeam]]; if (tempString!=nil) { cell.homeImageView.image = [UIImage imageNamed:tempString]; } return cell; }
因此,只有在我设置的字典中找到相应的图像时才设置homeImageView.这似乎适用于前几个单元格,但如果我滚动列表,我发现单元格没有一个图像.
我明白这可能是因为细胞被重复使用,但我在创建/重用细胞后设置了homeImageView?
这是我的CustomCell类的init方法
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { // Initialization code tournamentLabel = [[UILabel alloc] init]; tournamentLabel.textAlignment = UITextAlignmentCenter; tournamentLabel.font = [UIFont systemFontOfSize:12]; tournamentLabel.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]; tournamentLabel.textColor = [UIColor darkGrayColor]; homeLabel = [[UILabel alloc]init]; homeLabel.textAlignment = UITextAlignmentLeft; homeLabel.font = [UIFont systemFontOfSize:16]; homeLabel.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]; awayLabel = [[UILabel alloc]init]; awayLabel.textAlignment = UITextAlignmentRight; awayLabel.font = [UIFont systemFontOfSize:16]; awayLabel.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]; timeLabel = [[UILabel alloc]init]; timeLabel.textAlignment = UITextAlignmentCenter; timeLabel.font = [UIFont systemFontOfSize:30]; timeLabel.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]; timeLabel.textColor = [UIColor darkGrayColor]; homeImageView = [[UIImageView alloc]init]; awayImageView = [[UIImageView alloc]init]; [self.contentView addSubview:homeLabel]; [self.contentView addSubview:awayLabel]; [self.contentView addSubview:timeLabel]; [self.contentView addSubview:tournamentLabel]; [self.contentView addSubview:homeImageView]; [self.contentView addSubview:awayImageView]; } return self; }
解决方法
如果没有要显示的图像,则必须清除图像视图:
... if (tempString!=nil) { cell.homeImageView.image = [UIImage imageNamed:tempString]; } else { cell.homeImageView.image = nil; } ...