自定义单元格图像将重复每隔3个单元格

时间:2014-08-08 00:21:25

标签: ios uitableview

我在我的表格中的自定义单元格中添加一些图像时遇到了一些问题。在每个单元格中创建UIView,然后为其分配唯一标记。我一直在尝试将图像添加到一个特定的单元格,比如使用标签" 2204"例如,但它仍然会将该图像添加到每个第三个单元格(2201,2204等等......),所以我不确定甚至会导致什么。我在每个单元格中设置了一个标签来显示视图的当前标签,它显示标签是正确的,但为什么它会将图像放在其他单元格中呢?

我在这个表中只有一个部分,它只是按行进行。默认情况下,显示5行,但可以添加更多行。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    workoutTableViewCell *cell = (workoutTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[workoutTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.exerciseViewArea.tag = 2200 + indexPath.row;

    //using fifth cell as a test
    testview = [self.view viewWithTag:2204];
    return cell;
}

- (void)changeExerciseImage
{
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(9,10,20,20)];
    imageView.image = [UIImage imageNamed:@"testImage.png"];
    [testview addSubview:imageView];
    [testview bringSubviewToFront:imageView];

    NSLog(@"changed exercise image to %@", _exerciseTempText);
}

1 个答案:

答案 0 :(得分:1)

单元格可以被UITableView重用,因此您不必保留对单个单元格的引用,而是最好更新数据源,然后调用reloadDatareloadItemsAtIndexPaths。例如,您可以为每个单元格使用NSMutableArray个图像名称,然后执行以下操作:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    workoutTableViewCell *cell = (workoutTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[workoutTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(9,10,20,20)];
    [imageView setTag:myImageViewTag];
    [cell.exerciseViewArea addSubview:imageView];
    [cell.exerciseViewArea bringSubviewToFront:imageView];

    return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIImageView *imageView = (UIImageView *)[cell.exerciseViewArea viewWithTag:myImageViewTag];
    [imageView setImage:[UIImage imageNamed:[myArrayImages objectAtIndex:indexPath.row]]];
}

- (void)changeExerciseImage
{
    [myArrayImages replaceObjectAtIndex:4 withObject:@"testImage.png"];
    [myTableView reloadData]; //or just update that cell with reloadItemsAtIndexPaths
}