我的UITableView
包含'N'个部分,每个部分的行数为'N'。
我的要求是:
当表视图页面加载时,每个部分中的第1行必须进行选中。然后,用户可以选择在每个部分中选择他的选择,并在该特定部分中的那一行进行选中。
如何实现此功能?
答案 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;
}