由检查的表格单元格填充的iPhone UITableView。怎么样?

时间:2009-11-10 17:36:52

标签: iphone core-data uitableview entity-relationship

前几天我遇到了this blog post,从字面上看,根本不知道如何实施它。

有什么想法吗?

我认为它涉及核心数据,“权力”是多对多关系中的另一个实体,除此之外,我迷失了。

2 个答案:

答案 0 :(得分:1)

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

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

超级英雄tableview数据源将对所有超级英雄实体进行提取,然后使用每个超级英雄的名称填充每个单元格的文本。当用户点击英雄时,超级英雄表视图将告诉导航控制器将推动堆栈上的电源表视图并将所选超级英雄实体移交给电源tableview数据源。然后,power tableview数据源将使用与超级英雄实体的关系中的幂来填充表。它还会根据需要创建电源实体,并将它们添加到关系中。

如果您使用的数据量很小,则无需使用核心数据。您可以创建一个字典,其中每个键都是超级英雄的名称,每个值都是一个电源名称数组。超级英雄tableview数据源将填充键和powers tableview数据源将填充值数组中的各个元素。

我建议你从UINavigationController开始。

答案 1 :(得分:1)

您可以使用NSMutableSet支持“power”单元格的检查和取消选中,以跟踪所选的功率。无论您使用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];
}