UITableview通过滚动

时间:2015-08-06 21:48:08

标签: ios uitableview scroll uiimage duplicates

我有以下行为:我有一个行数= 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;
  }

我希望你能理解我的问题并抱歉我的英语不好:(

1 个答案:

答案 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的图像。