在多个部分中重用UITableViewCell

时间:2013-12-23 06:05:02

标签: ios iphone objective-c uitableview

在以下代码中,其他行重复 UILabel 文本。我知道它有一个表可重用性的问题,但无法弄清楚如何解决它。即使返回的计数,一切看起来都很好。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{
UITableViewCell *cell;

//Doc Name
if(indexPath.section == 0)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];

    }

    cell.textLabel.text= docName;
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];

    UILabel *name = [[UILabel alloc]init];
    name.backgroundColor = [UIColor clearColor];
    name.textAlignment = NSTextAlignmentCenter;
    name.frame = CGRectMake(600,2.0f,250,50);
    name.text = @"11:12:01";
    [cell addSubview:name];

}

//Joint Work
if(indexPath.section == 1)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];

    }

    cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row];
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];
}

//Detailing
if(indexPath.section == 2)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];

    }

    cell.textLabel.text= @"Detailing";
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];
}
}

4 个答案:

答案 0 :(得分:3)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{
UITableViewCell *cell;

//Doc Name
if(indexPath.section == 0)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_0_cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_0_cell"]autorelease];

    }

    cell.textLabel.text= docName;
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];

    UILabel *name = [[UILabel alloc]init];
    name.backgroundColor = [UIColor clearColor];
    name.textAlignment = NSTextAlignmentCenter;
    name.frame = CGRectMake(600,2.0f,250,50);
    name.text = @"11:12:01";
    [cell addSubview:name];

}

//Joint Work
if(indexPath.section == 1)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_1_cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_1_cell"]autorelease];

    }

    cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row];
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];
}

//Detailing
if(indexPath.section == 2)
{
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_2_cell"];

    if(cell==nil)
    {
        cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_2_cell"]autorelease];

    }

    cell.textLabel.text= @"Detailing";
    cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];
}
return cell;
}

如果成功重用正确的单元格,cellIdentifier必须对于不同类型的单元格是唯一的。因此,每个部分都有不同的标识符。

答案 1 :(得分:0)

在每次重新加载UILabel's之前,您只需<{>>删除UITableView每个单元格中UITableView的实例。这会对你有所帮助

创建像

之类的单元格之后
    static NSString *cellIdentifier = @"Identifier";        
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];        
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
    }

添加此

 for(id obj in cell.contentView.subviews)
    {
        if([obj isKindOfClass:[UILabel class]])
        {
            [obj removeFromSuperview];
        }
    }

希望你的问题现在得到解决!

答案 2 :(得分:0)

如果创建单元格,即当单元格为零时

,则分配标签
if(cell==nil)
    {
           cell= [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]autorelease];
           UILabel *name = [[UILabel alloc]init];
    }

答案 3 :(得分:0)

在表视图中重用单元格的简单方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;
    cell=[tableView dequeueReusableCellWithIdentifier:@"section_0_cell"];

    if(cell==nil)
    {
        cell= [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"section_0_cell"];
        cell.textLabel.font=[UIFont fontWithName:@"Times New Roman" size:17.f];
        UILabel *name = [[UILabel alloc]init];
        name.backgroundColor = [UIColor clearColor];
        name.textAlignment = NSTextAlignmentCenter;
        name.frame = CGRectMake(600,2.0f,250,50);

        [cell addSubview:name];
        name.tag=100;
    }

    UILabel *name = (UILabel*)[cell viewWithTag:100];
    name.hidden=YES;
    //Doc Name
    if(indexPath.section == 0)
    {
        name.hidden=NO;
        cell.textLabel.text= docName;
        name.text = @"11:12:01";
    }

    //Joint Work
    if(indexPath.section == 1)
    {
        cell.textLabel.text= [jointWrkNames objectAtIndex:indexPath.row];
    }

    //Detailing
    if(indexPath.section == 2)
    {
        cell.textLabel.text= @"Detailing";
    }
    return cell;
}