将子视图添加到UITableViewCell:滚动时添加了几次

时间:2012-06-20 07:21:31

标签: iphone ios xcode uitableview

我的tableView中有一些不同的单元格,每个单元格都有不同的子视图。每当一个单元格消失并重新出现时,子视图就会在旧视图的顶部添加,也会添加到其他单元格中。在不使用自定义单元格的情况下将子视图添加到单元格的正确方法是什么?

提前致谢

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"StatisticsCell";

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

    if (cell == nil)
    {        
        NSArray *topLevelObject = [[NSBundle mainBundle] loadNibNamed:@"StatisticsCell" owner:nil options:nil]; 
        for (id currentObject in topLevelObject)
        {
            if ([currentObject isKindOfClass:[UITableViewCell class]])
            {
                cell = (StatisticsCell *)currentObject; 



                break; 
            }
        }
    }


    if (indexPath.section == 0 && indexPath.row == 0)
    {
       //Add a subview here 
       [cell addsubview .... 
    }
    else if (indexPath.section == 0 && indexPath.row == 1)
    {
         //Add a subview here 
         [cell addsubview .... 
    }

     etc....

3 个答案:

答案 0 :(得分:5)

每当你滚动单元格的行方法被调用时,所以当你的单元格可见时,它会将子视图添加到单元格中,放置一个已添加视图的检查,制作一个ivar,即bool,n将其设置为true当你像这样卸载

时,你可以添加视图n false
.
.
.

 if (indexPath.section == 0 && indexPath.row == 0 && isFirstViewAlreadyAdded== NO)
    {
       //Add a subview here 
       [cell addsubview .... 
       isFirstViewAlreadyAdded = YES;
    }
    else if (indexPath.section == 0 && indexPath.row == 1 && isSecondViewAlreadyAdded == NO)
    {
         //Add a subview here 
         [cell addsubview .... 
       isSecondViewAlreadyAdded = YES;

    }

.
.
.

答案 1 :(得分:3)

您可以检查该子视图是否已添加到单元格中。

UIView *subView = [tableCell viewWithTag:tagOfYourSubView];    
if (subView) {
     //subView exists
}
else {
     //subView does not exist
}

如果没有添加,则可以添加。

答案 2 :(得分:1)

每次都不要添加子视图.. 您应该在if(cell == nil)块中添加子视图。 之后,您可以根据indexpath.row将隐藏属性设置为true或false。 像:

if (indexpath.row == 0)
img1.hidden = FALSE;
else
img1.hidden = TRUE;