0

レシートとマイレージの2つの異なるオブジェクトを表示するために使用しているUITableViewがあります。

これは、これを実行するために使用していた元のコードです。

- (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つのマイレージがあり、最初にレシート、次にマイレージが表示されます)。しかし、私はこれを行う方法がまったくわかりません。誰かが私がこの問題を解決する方法を説明できますか?すべてのマイレージオブジェクトとレシートオブジェクトの単一の配列を作成し、適切なセルタイプを使用するために、このメソッドにどの種類のオブジェクトがあるかを何らかの方法で識別できる方法はありますか?

どうもありがとう、

ジャック

4

1 に答える 1

1

これを試してください。if条件を削除し、Receiptセルの[project.milages count]からを差し引きました。index.row

- (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;
        }
}

UITableView2つの異なるセクションでを使用することもできます。

于 2012-04-27T16:52:41.443 に答える