gpt4 book ai didi

cocoa-touch - UITableViewCell - 与之前的单元格内容重叠

转载 作者:行者123 更新时间:2023-12-03 21:08:18 25 4
gpt4 key购买 nike

我的 table 有这个奇怪的问题

  • i 有大约 20 个单元格要显示
  • 每个单元格的高度约为 84px
  • 当我点击没有单元格时,我设置了背景颜色
  • 前 4 个单元格没问题,但是当我向下滚动并单击第 5 个单元格时,每个单元格的内容开始与其他一些内容重叠,通常是第 4 个单元格的内容。

  • 我相信它的一些细胞可重用性或绘图问题。我不知道如何解决它,我已经检查了我的代码,但我没有在触摸时更改单元格的内容。

    这是我的代码,也会添加一些图片
    Cell with overlapped content
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    return 104;
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [stores count];
    }

    -(UITableViewCell *)tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    CGRect Label1Frame = CGRectMake(5, 5, 250, 30);
    CGRect Label2Frame = CGRectMake(6, 42, 220, 20);
    CGRect Label3Frame = CGRectMake(6, 62, 220, 20);
    CGRect Label4Frame = CGRectMake(240,56, 70, 12);

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
    }else{
    // a cell is being recycled, remove the old edit field (if it contains one of our tagged edit fields)
    UIView *viewToCheck = nil;
    viewToCheck = [cell.contentView viewWithTag:1];
    if (!viewToCheck) {
    [viewToCheck removeFromSuperview];
    DebugLog(@"View removed");
    }
    }
    //cell.selectionStyle=UITableViewCellSelectionStyleNone;
    [cell setSelectedBackgroundView:bgView];
    NSInteger row=indexPath.row;
    UILabel *lblTemp;
    [[cell contentView] clearsContextBeforeDrawing];

    //Line 1

    lblTemp=[[UILabel alloc] initWithFrame: Label1Frame];
    lblTemp.tag=1;
    lblTemp.text=[[stores objectAtIndex:row] objectAtIndex:0] ;
    lblTemp.numberOfLines=2;
    lblTemp.font = [UIFont boldSystemFontOfSize:13];
    lblTemp.adjustsFontSizeToFitWidth=YES;
    lblTemp.minimumFontSize=12;
    lblTemp.textColor = [UIColor grayColor];
    [cell.contentView addSubview:lblTemp];
    [lblTemp release];
    //Line 2
    lblTemp = [[UILabel alloc] initWithFrame:Label2Frame];
    lblTemp.tag = 2;
    lblTemp.text=[[stores objectAtIndex:row]objectAtIndex:1];
    lblTemp.font = [UIFont systemFontOfSize:12];
    lblTemp.textColor = [UIColor grayColor ];
    lblTemp.textAlignment=UITextAlignmentLeft;
    lblTemp.adjustsFontSizeToFitWidth=YES;
    lblTemp.minimumFontSize=12;

    [cell.contentView addSubview:lblTemp];
    [lblTemp release];

    //Line 3
    lblTemp = [[UILabel alloc] initWithFrame:Label3Frame];
    lblTemp.tag = 3;
    lblTemp.text=[[stores objectAtIndex:row]objectAtIndex:2];
    lblTemp.font = [UIFont systemFontOfSize:12];
    lblTemp.textColor = [UIColor grayColor ];
    [cell.contentView addSubview:lblTemp];
    [lblTemp release];
    //Phone button
    UIButton *phoneButton=[[UIButton alloc] initWithFrame:CGRectMake(240,16,30,30)];
    [phoneButton setBackgroundImage:[UIImage imageNamed:@"phone.png"] forState:UIControlStateNormal];
    [phoneButton setTag:row];
    [phoneButton addTarget:self action:@selector(dialNumber:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:phoneButton];
    //ANnotation button
    UIButton *annotation=[[UIButton alloc] initWithFrame:CGRectMake(274,16,30,30)];
    [annotation setTag:row];
    [annotation setBackgroundImage:[UIImage imageNamed:@"tab.png"] forState:UIControlStateNormal];
    [annotation addTarget:self action:@selector(openMap:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:annotation];
    [annotation release];
    //Distance label
    //Line 3
    lblTemp = [[UILabel alloc] initWithFrame:Label4Frame];
    lblTemp.tag = 4;
    lblTemp.text=[[stores objectAtIndex:row]objectAtIndex:5];
    lblTemp.textAlignment=UITextAlignmentCenter;
    lblTemp.font = [UIFont systemFontOfSize:13];
    lblTemp.textColor = [UIColor grayColor ];
    [lblTemp setAdjustsFontSizeToFitWidth:YES];
    [cell.contentView addSubview:lblTemp];
    [phoneButton release];
    [lblTemp release];
    [cell setNeedsLayout];
    [cell setNeedsDisplay];
    return cell;
    }
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell=[tableView cellForRowAtIndexPath:indexPath ];
    for(UILabel *lbl in cell.contentView.subviews){
    if([lbl isKindOfClass:[UILabel class]]){
    lbl.textColor=[UIColor whiteColor];

    }
    }
    //UITableViewCell *cell1;
    //NSString *row=[NSString stringWithFormat:@"%d",indexPath.row];
    svm = [[storesMapView alloc] initWithNibName:@"storesMapView" bundle:nil];
    [svm initWithXML:stores:indexPath.row];
    CGRect theFrame = svm.view.frame;
    theFrame.origin = CGPointMake(self.view.frame.size.width, 0);
    svm.view.frame = theFrame;
    theFrame.origin = CGPointMake(0,0);
    theFrame.size=CGSizeMake(320,355);
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3f];
    svm.view.frame = theFrame;
    [UIView commitAnimations];
    [subView addSubview:svm.view];
    backButton.hidden=NO;


    }

    最佳答案

    我通过反复试验弄明白了;如果这可以帮助某人

    在 cellforRowAtIndexPath 中,我尝试在绘制单元格之前清除所有单元格 subview

    //TRY TO REMOVE ALL CONTENT
    for(UIView *view in cell.contentView.subviews){
    if ([view isKindOfClass:[UIView class]]) {
    [view removeFromSuperview];
    }
    }

    如果有人能指点我一些更简单的方法,我会很高兴

    谢谢

    关于cocoa-touch - UITableViewCell - 与之前的单元格内容重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4790659/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com