1

我的 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....
4

3 回答 3

5

每当您滚动单元格以调用行方法时,因此当您的单元格可见时,它将向单元格添加子视图。放置一个已添加视图的检查,创建一个 bool 的 ivar,并在添加视图时将其设置为 true,在删除时将其设置为 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;

    }

.
.
.
于 2012-06-20T07:26:12.720 回答
3

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

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

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

于 2012-06-20T07:22:38.003 回答
1

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

if (indexpath.row == 0)
img1.hidden = FALSE;
else
img1.hidden = TRUE;
于 2012-06-20T07:55:35.150 回答