我有以下行为:我有一个行数= 20
的表我使用UIImage在Storyboard UITableView Cell中创建。 我使用函数didSelectRowAtIndexPath来显示和隐藏图像。如果我选择一行,将显示UIImage xxx.png。如果我再次选择同一行,则隐藏图像。这是有效的,但是当我向下滚动时,我会看到带有图像的行,而我没有选择此行。 我只会在选择一行时看到图像,而不是重复,我会滚动表格。
这是我的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
WorkoutTableVCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WorkoutCell" forIndexPath:indexPath];
cell.checkImage= nil;
if (cell == nil)
{
cell = [[WorkoutTableVCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"WorkoutCell"];
}
else{
//Old cell...get previously createdd imageview
cell.checkImage = (UIImageView*)[cell.contentView viewWithTag:1001];
}
long row = [indexPath row];
cell.lblCell.text = _MyValues[row];
return cell;
}
我希望你能理解我的问题并抱歉我的英语不好:(
答案 0 :(得分:1)
细胞被重复使用,因此您需要每次都设置细胞的图像。您需要有另一个包含每个indexPath图像的数据源,并使用它来为单元格中的UIImageView设置图像。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
WorkoutTableVCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WorkoutCell" forIndexPath:indexPath];
if (cell == nil)
{
cell = [[WorkoutTableVCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"WorkoutCell"];
}
long row = [indexPath row];
cell.lblCell.text = _MyValues[row];
// set the image for the UIImageView here
cell.imageView.image = _MyImages[row];
return cell;
}
更好的方法是让您的数据源成为键/值对(如NSDictionary),其中Keys是标签中的文本,值是应分配给UIImageView的图像。