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

そのサブビューがすでにセルに追加されているかどうかを確認できます。

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 に従って、隠しプロパティを true または false に設定できます。お気に入り:

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