iPhone - 试图在表格视图中显示 2 种不同的对象类型

Posted

技术标签:

【中文标题】iPhone - 试图在表格视图中显示 2 种不同的对象类型【英文标题】:iPhone - Trying to Display 2 different object types in a table-view 【发布时间】:2012-04-27 16:14:50 【问题描述】:

我有一个 UITableView,我用它来尝试显示 2 个不同的对象 - 收据和里程数。

这是我用来尝试完成此操作的原始代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    
    Project *project = [[Project alloc] init];
    project = [appDelegate.projects objectAtIndex:indexPath.section];

    if (indexPath.row >= [project.receipts count])
    
        if (indexPath.row >= [project.milages count])
            return NULL;
        
        else 
            //Create a new journey cell and set its UI values
            MilageCell *cell = (MilageCell *)[tableView 
                                              dequeueReusableCellWithIdentifier:@"MilageCell"];
            Milage *milage = [project.milages objectAtIndex:indexPath.row];
            cell.locationLabel.text = milage.location;
            cell.dateLabel.text = [NSString stringWithFormat:@"%@", milage.date];
            cell.totalLabel.text = [NSString stringWithFormat:@"£%@", milage.total];
            return cell;
        
    
    else 
    
        ReceiptCell *cell = (ReceiptCell *)[tableView 
                                            dequeueReusableCellWithIdentifier:@"ReceiptCell"];
        Receipt *receipt = [project.receipts objectAtIndex:indexPath.row];
        cell.dateLabel.text = receipt.receiptDate;
        cell.descriptionLabel.text = receipt.descriptionNote;
        cell.amountLabel.text = [NSString stringWithFormat:@"£%@", receipt.amount];
        return cell;
    


我知道,如果我在每个数组(project.receipts 和 project.milages)中都有 1 个对象,那么这段代码根本不起作用。我也知道你不能从这个方法返回 NULL。我想做的是以某种方式显示我所有的收据对象,然后是我的所有里程对象(所以说表格视图中的第 0 部分有 3 个收据和 3 个里程数,它会首先显示收据,然后是里程数)。但是我完全不知道该怎么做,有人可以解释我如何解决这个问题吗?有没有什么方法可以构建一个包含所有里程和收据对象的数组,然后以某种方式辨别我在这个方法中有哪些类型的对象,以便使用适当的单元格类型?

非常感谢,

杰克

【问题讨论】:

你为什么先init你的项目然后覆盖它?首先它没有任何意义,其次,您正在泄漏内存:Project *project = [[Project alloc] init]; project = [appDelegate.projects objectAtIndex:indexPath.section]; 【参考方案1】:

试试这个,我刚刚删除了一个 if 条件,并从收据单元格的index.row 中减去了[project.milages count]

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    
    Project *project = [[Project alloc] init];
    project = [appDelegate.projects objectAtIndex:indexPath.section];

        if (indexPath.row >= [project.milages count])
            ReceiptCell *cell = (ReceiptCell *)[tableView 
                                                dequeueReusableCellWithIdentifier:@"ReceiptCell"];
            Receipt *receipt = [project.receipts objectAtIndex:indexPath.row-[project.milages count]];
            cell.dateLabel.text = receipt.receiptDate;
            cell.descriptionLabel.text = receipt.descriptionNote;
            cell.amountLabel.text = [NSString stringWithFormat:@"£%@", receipt.amount];
            return cell;
        
        else 
            //Create a new journey cell and set its UI values
            MilageCell *cell = (MilageCell *)[tableView 
                                              dequeueReusableCellWithIdentifier:@"MilageCell"];
            Milage *milage = [project.milages objectAtIndex:indexPath.row];
            cell.locationLabel.text = milage.location;
            cell.dateLabel.text = [NSString stringWithFormat:@"%@", milage.date];
            cell.totalLabel.text = [NSString stringWithFormat:@"£%@", milage.total];
            return cell;
        

您还可以将UITableView 用于两个不同的部分。

【讨论】:

以上是关于iPhone - 试图在表格视图中显示 2 种不同的对象类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 iphone GPS 在表格视图单元格中显示附近的特定营业所

iPhone 70 种不同视图的最佳设计?

Iphone:添加新对象时如何更新显示托管对象的表格视图

表格视图没有滚动到最后一行?

iPhone如何显示不同的视图控制器以响应设备旋转?

UITableView 和 SearchBarController 视图 iPhone