0

我有一个UITableView包含“N”个部分的部分,每个部分中有“N”个行。

我的要求是:

当表格视图页面加载时,每个部分中的第一行必须被选中。然后,用户可以选择在每个部分中选择他的选择,并且该特定部分中的那一行被选中。

如何实现此功能?

4

2 回答 2

1

您可以将单元格的附件类型设置为复选标记:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = ... // code to get the cell

    // isCellSelectedAtIndexPath: is your custom method
    // which encapsulates cell selection state logic
    if ([self isCellSelectedAtIndexPath:indexPath])
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    return cell;
}
于 2013-07-09T11:22:46.520 回答
1

表的任何特定行中显示的信息由表的数据源确定。确保您用于数据的数据结构具有某种方式来指示给定行具有复选标记。然后只需执行-tableView:cellForRowAtIndexPath:它以确定是否应为有问题的单元格显示复选标记并相应地调整单元格。

例如,假设数据表示为一个节数组,每个节都是一个字典数组。然后,每一行都有自己的字典。如果一行有一个复选标记,它的字典将有一个checked条目设置为YES; 如果不是,则该条目是NO. 您可以将复选标记显示为图像。然后你有:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyTableViewCell *cell = ... // code to get the cell

    if (myData[indexPath.section][indexPath.row][@"checked"].boolValue == YES) {
        cell.checkedImageView.image = self.checkmarkImage;
    }
    else {
        cell.checkedImageView.image = nil;
    }

    return cell;
}

将复选标记放在每个部分的第一行只是初始化数据的问题,以便检查每个部分数组中的第一个条目而其他条目不被选中。

您可以通过实现更改选中的单元格,-tableView:didSelectRowAtIndexPath:以便它扫描给定部分的数组并取消选中任何选中的行,然后检查选定的行。

当然,您不必使用字典数组来表示您的数据,而且很有可能您不需要。很好——这里的重点是您将通过实现表的委托和数据源来实现您所追求的功能,以便它们支持复选标记,并且在任何特定的情况下存在或不存在复选标记行将由表数据的某些方面决定。

于 2013-07-09T09:43:40.743 回答