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 种不同的对象类型的主要内容,如果未能解决你的问题,请参考以下文章