我在我的表格中的自定义单元格中添加一些图像时遇到了一些问题。在每个单元格中创建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);
}
答案 0 :(得分:1)
单元格可以被UITableView
重用,因此您不必保留对单个单元格的引用,而是最好更新数据源,然后调用reloadData
或reloadItemsAtIndexPaths
。例如,您可以为每个单元格使用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
}