2009-11-10 84 views

回答

1

可以支持检查和使用的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]; 
} 
+0

要存储选中的权力,这在逻辑上起作用。但是如何保存列表的检查状态。我希望能够回到清单并检查,取消权力,并在主视图中反映出来。 – monotreme 2009-11-12 19:41:50

+0

那么,您需要使用selectedPowerSet的最终状态来适当地设置您的数据模型。如果您使用的是核心数据,则可以调整超级英雄对象上的权力关系以匹配selectedPowerSet。 – gerry3 2009-11-12 20:38:28

1

如果要实现视图层次结构,只需从导航项目开始。 Superhero tableview控制器是你的根控制器,而power tableview是一个子控制器。

在你的核心数据模型,你将有两个实体,一个超级英雄实体和权力的实体。每个超级英雄实体都有一个名字,然后与电力实体有多对多的关系。权力实体将拥有一个名称,并且(可选)与拥有权力的所有超级英雄实体有许多关系。 (并非真的需要,但在这种情况下,但良好的做法。)

超级英雄桌面视图数据源将为所有超级英雄实体进行提取,然后用每个超级英雄的名称填充每个单元格的文本。当用户点击英雄时,超级英雄表格视图会告诉navcontroller会推动堆栈上的power tableview,并将选定的超级英雄实体交给power tableview数据源。然后,强大的tableview数据源将使用超级英雄实体关系中的权力填充表格。它还会根据需要创建权力实体并将其添加到关系中。

如果您使用的数据量很小,则不需要为此使用核心数据。你可以创建一个字典,其中每个键都是超级英雄的名字,每个值都是一个权力名称数组。超级英雄tableview数据源将使用键填充,而power tableview数据源将使用值数组中的单个元素填充。

我建议你从UINavigationController开始。

+0

有道理。关于权力列表中权力的实际核查或取消选中情况如何?我假设通过检查,它会将实体添加到超级英雄,并通过取消选中它将删除。 但如何预先填充电源列表与选中/未选中状态? – monotreme 2009-11-10 18:41:44

相关问题