UITableView选中每个部分中某个特定行的复选标记

时间:2013-07-09 09:07:54

标签: objective-c uitableview

我的UITableView包含'N'个部分,每个部分的行数为'N'。

我的要求是:

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

如何实现此功能?

2 个答案:

答案 0 :(得分: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:来更改选中的单元格,以便它扫描给定部分的数组并取消选中任何选中的行,然后检查所选行。

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

答案 1 :(得分:1)

您可以将单元格的accessoryType设置为复选标记:

- (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;
}