重用多个自定义tableview单元格

时间:2013-05-15 21:54:44

标签: objective-c

大家好我正在使用多个tableview cell.one用于textfiled,另一个用于images.and另一个用于button.the东西是自定义tableview单元创建的不会被重用,并且单元格每次都变为零。你们帮助我out.below是代码。

   -(ProductCell *)getProductCell
{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ProductCell" owner:nil options:nil];
    ProductCell  *cell;
    for (id currentObject in topLevelObjects)
    {
        if ([currentObject isKindOfClass:[ProductCell  class]])
        {
            cell= (ProductCell*)currentObject;
            return cell;
        }
    }
    return nil;
}
-(RatingCell *)getRatingCell
{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"RatingCell" owner:nil options:nil];
    RatingCell  *cell;
    for (id currentObject in topLevelObjects)
    {
        if ([currentObject isKindOfClass:[RatingCell  class]])
        {
            cell= (RatingCell*)currentObject;
            return cell;
        }
    }
    return nil;
}

-(NotifyCell *)getNotifyCell
{
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"NotifyCell" owner:nil options:nil];
    NotifyCell  *cell;
    for (id currentObject in topLevelObjects)
    {
        if ([currentObject isKindOfClass:[NotifyCell  class]])
        {
            cell= (NotifyCell *)currentObject;
            return cell;
        }
    }
    return nil;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier1 = @"Cell1";
    static NSString *CellIdentifier2 = @"Cell2";
    static NSString *CellIdentifier3 = @"Cell3";

    self.productCell=(ProductCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
    self.notifyCell = (NotifyCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
    self.ratingCell =(RatingCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier3];

    if (productCell == nil) productCell = [self getProductCell];
    if (notifyCell == nil) notifyCell = [self getNotifyCell];
    if (ratingCell == nil) ratingCell = [self getRatingCell];

    switch (indexPath.section) {
        case 0:
        self.productCell.lblName.text=[productTitleArray objectAtIndex:indexPath.row];
        return productCell;
        break;
        case 1:
        self.productCell.lblName.text=[invoiceTitleArray objectAtIndex:indexPath.row];
        return productCell;
        break;
        case 2:
        self.productCell.lblName.text=[warrantyTitleArray objectAtIndex:indexPath.row];
        return productCell;
        break;
        case 3:
        self.productCell.lblName.text=@"Description";
        return productCell;
        break;
        case 4:
        self.ratingCell.lblName.text=@"Rating";
        self.ratingCell.starRatingControl.delegate=self;
        return self.ratingCell;
        break;
        case 5:
        self.productCell.lblName.text=[serviceContactsTitleArray objectAtIndex:indexPath.row];
        return productCell;
        break;
        case 6:
        self.notifyCell.lblName.text=[notifyTitleArray objectAtIndex:indexPath.row];
        return notifyCell;
        break;
        default:
        break;
    }
    return productCell;
    }

1 个答案:

答案 0 :(得分:1)

这里有一些事情。

1)在托管表格视图单元格的每个XIB文件中,确保您已在其上设置标识符,以匹配您在“cellForRowAtIndexPath”方法中使用的标识符。例如。对于RatingCells,“@"Cell3”。

2)您需要为从XIB加载的对象注册单元重用标识符。

例如:

UINib * nib = [UINib nibWithNibName: @"RatingCell" bundle: nil];
if(nib)
{
    [tableView registerNib: nib forCellReuseIdentifier:@"Cell3"];
}

你可能需要在之前开始调用“cellForRowAtIndexPath”(至少这就是我所做的)。也许您可以将“tableView”参数发送到各种“get*Cell”方法。