为什么tableview数据重叠?我已附上我的代码。

如果我再次解释我的代码,那么


xml数据位于表视图中显示的records数组中。
第一次执行程序时,数据在正确的位置,但是当我开始垂直滚动时,数据开始显示在各个单元格中。假设第一个单元格显示在最后一个单元格中,第二个单元格数据显示在第一个单元格中.....等等。


注意:对于重叠问题,我也使用了switchviewwithtag,但现在当我开始在tableview上滚动时,cell数据仍开始在错误的UITableview.中显示

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
   // cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:15.0];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    NSLog(@"%d",indexPath.section);

    switch (indexPath.section) {
        case 0:
            order_cellView = [[UIView alloc] initWithFrame:CGRectMake(5, 5, cell.frame.size.width,cell.frame.size.height) ];
            order_cellView.backgroundColor = [UIColor redColor];
            order_cellView.tag =1000;

            NSLog(@"index path 0");
            CGRect frame;
            frame.origin.x =0;
            frame.origin.y = 10;
            frame.size.height = 30;
            frame.size.width = 230;

            CGRect valueFrame;
            valueFrame.origin.x =237;
            valueFrame.origin.y = 5;
            valueFrame.size.height = 30;
            valueFrame.size.width = 80;


            for(int m=0;m<numberOfProduct;m++){
                NSLog(@"for loop here");
                productLabel = [[UILabel alloc] initWithFrame:frame];
                productLabel.tag = m;
                productLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
                productLabel.backgroundColor = [UIColor clearColor];
                productLabel.lineBreakMode = UILineBreakModeCharacterWrap;
                productLabel.numberOfLines = 2;
                productLabel.textAlignment = UITextAlignmentCenter;
                [order_cellView addSubview:productLabel];
                productLabel.text =  [NSString stringWithFormat:@"%@ x %@ x %@",[[products objectAtIndex:m] objectAtIndex:1],[[products objectAtIndex:m] objectAtIndex:2],[[products objectAtIndex:m] objectAtIndex:3]];
                frame.origin.y += 45;

                productValueLabel = [[UILabel alloc] initWithFrame:valueFrame];
                productValueLabel.tag = m+2;
                productValueLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
                productValueLabel.backgroundColor = [UIColor clearColor];
                productValueLabel.lineBreakMode = UILineBreakModeCharacterWrap;
                productValueLabel.numberOfLines = 2;
                productValueLabel.textAlignment = UITextAlignmentCenter;
                productValueLabel.text = [NSString stringWithFormat:@"%@",[[products objectAtIndex:m] objectAtIndex:5]];
                [order_cellView addSubview:productValueLabel];
                valueFrame.origin.y += 45;
            }
            [cell.contentView addSubview:order_cellView];
            break;
        case 1:
            email_cellView = [[UIView alloc] initWithFrame:CGRectMake(5, 5, cell.frame.size.width,cell.frame.size.height) ];
            email_cellView.backgroundColor = [UIColor clearColor];
            email_cellView.tag =1001;


            emailAdressLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 0, cell.frame.size.width, cell.frame.size.height)];
            emailAdressLabel.tag = 100;
            emailAdressLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            emailAdressLabel.backgroundColor = [UIColor clearColor];
            emailAdressLabel.lineBreakMode = UILineBreakModeCharacterWrap;
            emailAdressLabel.numberOfLines = 2;
            emailAdressLabel.textAlignment = UITextAlignmentLeft;
            emailAdressLabel.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:6]];
            [email_cellView addSubview:emailAdressLabel];
            [cell.contentView addSubview:email_cellView];

            break;
        case 2:

            phoneNumberLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 2, cell.frame.size.width, cell.frame.size.height)];
            phoneNumberLabel.tag = 101;
            phoneNumberLabel.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            phoneNumberLabel.backgroundColor = [UIColor clearColor];
            phoneNumberLabel.lineBreakMode = UILineBreakModeCharacterWrap;
            phoneNumberLabel.numberOfLines = 1;
            phoneNumberLabel.textAlignment = UITextAlignmentLeft;
            phoneNumberLabel.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:7]];
            [cell.contentView addSubview:phoneNumberLabel];

            break;
        case 3:
            billingDetails = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 160, cell.frame.size.height)];
            billingDetails.tag = 102;
            billingDetails.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            billingDetails.backgroundColor = [UIColor clearColor];
            billingDetails.lineBreakMode = UILineBreakModeCharacterWrap;
            billingDetails.numberOfLines = 4;
            billingDetails.textAlignment = UITextAlignmentLeft;
            billingDetails.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:4]];
            [cell.contentView addSubview:billingDetails];
            break;
        case 4:
            shippingDetails = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 160, cell.frame.size.height)];
            shippingDetails.tag = 103;
            shippingDetails.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            shippingDetails.backgroundColor = [UIColor clearColor];
            shippingDetails.lineBreakMode = UILineBreakModeCharacterWrap;
            shippingDetails.numberOfLines = 4;
            shippingDetails.textAlignment = UITextAlignmentLeft;
            shippingDetails.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:5]];
            [cell.contentView addSubview:shippingDetails];

            break;
        case 5:
            orderStatus = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, cell.frame.size.width, cell.frame.size.height)];
            orderStatus.tag = 104;
            orderStatus.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            orderStatus.backgroundColor = [UIColor clearColor];
            orderStatus.lineBreakMode = UILineBreakModeCharacterWrap;
            orderStatus.numberOfLines = 1;
            orderStatus.textAlignment = UITextAlignmentLeft;
            orderStatus.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:19]];
            [cell.contentView addSubview:orderStatus];

            break;
        case 6:
            deleteOrder = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, cell.frame.size.width, cell.frame.size.height)];
            deleteOrder.tag = 110;
            deleteOrder.font = [UIFont fontWithName:@"Arial-BoldMT" size:13];
            deleteOrder.backgroundColor = [UIColor clearColor];
            deleteOrder.lineBreakMode = UILineBreakModeCharacterWrap;
            deleteOrder.numberOfLines = 1;
            deleteOrder.textAlignment = UITextAlignmentLeft;
            deleteOrder.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:19]];
            [cell.contentView addSubview:deleteOrder];

            break;

        default:
            break;
    }
}

switch (indexPath.section) {
    case 0:
        order_cellView = (UIView *)[cell.contentView viewWithTag:1000];
        for(int m=0;m<numberOfProduct;m++){
            productLabel = (UILabel *)[order_cellView viewWithTag:m];
            productValueLabel = (UILabel *)[order_cellView viewWithTag:m+2];
        }
        if(indexPath.section == 0){
            for(int m=0;m<numberOfProduct;m++){
                productLabel.text =  [NSString stringWithFormat:@"%@ x %@ x %@",[[products objectAtIndex:m] objectAtIndex:1],[[products objectAtIndex:m] objectAtIndex:2],[[products objectAtIndex:m] objectAtIndex:3]];
                productValueLabel.text = [NSString stringWithFormat:@"%@",[[products objectAtIndex:m] objectAtIndex:5]];
            }
        }
        break;
    case 1:
        email_cellView = (UIView *)[cell.contentView viewWithTag:1001];
        emailAdressLabel = (UILabel *)[email_cellView viewWithTag:100];
        emailAdressLabel.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:6]];
        break;
    case 2:
        phoneNumberLabel = (UILabel *)[cell.contentView viewWithTag:101];
        phoneNumberLabel.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:7]];
        break;
    case 3:
        billingDetails = (UILabel *)[cell.contentView viewWithTag:102];
        billingDetails.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:4]];
        break;
    case 4:
        shippingDetails = (UILabel *)[cell.contentView viewWithTag:103];
        shippingDetails.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:5]];
        break;
    case 5:
        orderStatus = (UILabel *)[cell.contentView viewWithTag:104];
        orderStatus.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:19]];
        break;
    case 6:
        deleteOrder = (UILabel *)[cell.contentView viewWithTag:110];
        deleteOrder.text = [NSString stringWithFormat:@"%@",[[records objectAtIndex:0] objectAtIndex:19]];
        break;
    default:
        break;
}

return cell;


}

最佳答案

我认为您的主要问题是您有7种不同的“类型”单元格,但只有一种“重用标识符”。这意味着订单单元可以稍后作为删除订单单元重用。但是,当单元被重用时,它不一定具有全部显示所需的所有元素。

例如,电子邮件单元格的标签为1001,删除单元格的标签为110,但反之则不然。

关于ios - 为什么UITableview数据重叠?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8077547/

10-10 21:04
查看更多