前些日子我来到了this blog post,从字面上看不知道如何在逻辑上实现它。iPhone UITableView由选中的表格单元格填充。怎么样?
任何想法?
我想它涉及的核心数据,与“权力”是另一个实体的一对多的关系,除此之外,我迷路了。
前些日子我来到了this blog post,从字面上看不知道如何在逻辑上实现它。iPhone UITableView由选中的表格单元格填充。怎么样?
任何想法?
我想它涉及的核心数据,与“权力”是另一个实体的一对多的关系,除此之外,我迷路了。
可以支持检查和使用的NSMutableSet跟踪选定的权力的“权力”细胞取消选中。无论您使用Core Data还是其他一些方法将权力数据提供给UITableView,这都是有效的。
例如,在表中的数据源实现:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// do usual stuff here including getting the cell
// determine the power from the IndexPath.row
if ([selectedPowerSet member:power])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
cell.accessoryType = UITableViewCellAccessoryNone;
}
return cell;
}
,并在表的委托(通常是相同的类)实现:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// determine the power from the IndexPath.row
if ([selectedPowerSet member:power]) {
[selectedPowerSet removeObject:power];
} else {
[selectedPowerSet addObject:power];
}
[tableView reloadData];
}
如果要实现视图层次结构,只需从导航项目开始。 Superhero tableview控制器是你的根控制器,而power tableview是一个子控制器。
在你的核心数据模型,你将有两个实体,一个超级英雄实体和权力的实体。每个超级英雄实体都有一个名字,然后与电力实体有多对多的关系。权力实体将拥有一个名称,并且(可选)与拥有权力的所有超级英雄实体有许多关系。 (并非真的需要,但在这种情况下,但良好的做法。)
超级英雄桌面视图数据源将为所有超级英雄实体进行提取,然后用每个超级英雄的名称填充每个单元格的文本。当用户点击英雄时,超级英雄表格视图会告诉navcontroller会推动堆栈上的power tableview,并将选定的超级英雄实体交给power tableview数据源。然后,强大的tableview数据源将使用超级英雄实体关系中的权力填充表格。它还会根据需要创建权力实体并将其添加到关系中。
如果您使用的数据量很小,则不需要为此使用核心数据。你可以创建一个字典,其中每个键都是超级英雄的名字,每个值都是一个权力名称数组。超级英雄tableview数据源将使用键填充,而power tableview数据源将使用值数组中的单个元素填充。
我建议你从UINavigationController开始。
有道理。关于权力列表中权力的实际核查或取消选中情况如何?我假设通过检查,它会将实体添加到超级英雄,并通过取消选中它将删除。 但如何预先填充电源列表与选中/未选中状态? – monotreme 2009-11-10 18:41:44
要存储选中的权力,这在逻辑上起作用。但是如何保存列表的检查状态。我希望能够回到清单并检查,取消权力,并在主视图中反映出来。 – monotreme 2009-11-12 19:41:50
那么,您需要使用selectedPowerSet的最终状态来适当地设置您的数据模型。如果您使用的是核心数据,则可以调整超级英雄对象上的权力关系以匹配selectedPowerSet。 – gerry3 2009-11-12 20:38:28