在UITableViewCell中动态添加UIImageView

时间:2011-08-20 12:57:27

标签: iphone objective-c uitableview

我正在使用UITableView显示有关驾驶快速后果的一些信息:罚款将会是什么等等。我还会使用驾驶执照中的一些红色“点”。由于每行可以在0到6之间,我已经完成了以下操作:

- (UITableViewCell *)tableView:cellForRowAtIndexPath:

// Code if no cell is available in the que

// End of that code

UIImage *seniorImage = [UIImage imageNamed:@"ticket_dot.png"];

if (seniorDots == 0) {

} else {
    for (int i = 0; i < seniorDots; i++) {
        UIImageView *seniorImageView = [[UIImageView alloc] initWithFrame:CGRectMake(40.0 + (i * 15.0), 40.0, 15.0, 40.0)];
        seniorImageView.image = seniorImage;
        seniorImageView.contentMode = UIViewContentModeCenter;
        [cell.contentView addSubview:seniorImageView];
        [seniorImageView release];
    }
}

seniorDots是我从plist文件中获取的变量。代码按预期工作,但您可能会看到我无法删除它们。所以我第一次打开tableview时会看到预期的视图,但如果我再次向上滚动代码,只需在单元格上添加UIImageViews,而不是删除旧的。如何在添加新点之前引用这些点以将其从屏幕中删除?

2 个答案:

答案 0 :(得分:2)

 UITableViewCell *cell = (UITableViewCell *)[tableView    dequeueReusableCellWithIdentifier:CellIdentifier];

UIImageView *imgView; 
if(cell == nil)
{
   cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero         reuseIdentifier:CellIdentifier] autorelease];

 imgView = [[UIImageView alloc] initWithFrame:CGRectMake(100,0,100,62)];
[imgView setImage:[UIImage imageNamed:@"img.png"]];
imgView.tag = 55;
[cell.contentView addSubview:imgView];
[imgView release];
} 
else
{
    imgView = (id)[cell.contentView viewWithTag:55];
}

答案 1 :(得分:1)

您可以将以下代码放在cellForRowAtIndexPath方法中:

//删除其他数据

   for (UIImageView *img in cell.contentView.subviews) {
        if ([img isKindOfClass:[UIImageView class]]) {
            [img removeFromSuperview];
        }
    }

我希望它会对你有所帮助。如果遇到任何困难,请告诉我。