在分段的UITableView中存储多个选择

时间:2011-07-19 15:32:06

标签: iphone arrays uitableview selection

我在UITableView中有一个人员列表,按人名的第一个字母划分。

我希望这个列表允许MULTIPLE选择(想象100个人,在列表中,按名称划分,每个名称旁边都有一个复选框)。

用户界面没问题 - 全部排序。

如何存储选择?

我需要通过使用indexPath来找到它们,从某种数组中存储和检索选择(简单的BOOL值)。

在使用部分之前,它很容易 - 只是一个NSMutableArray,并通过indexPath.row进行检索。但是我必须通过BOTH部分和行找到部分。多维数组似乎与Objective C不太合适,尽管在某个帖子中建议使用多维c数组。

我可以保存到数据库 - 但是当你向上和向下滚动一个表来检查和取消选中复选框时,这会有很多保存和检索....而且我不需要数据在数据库中持续存在 - 转到那时使用指向所选记录的指针创建记录。

当然,我不是第一个达到这种困境的人。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我仍然有兴趣听到想法 - 但是在拖网几个小时(直到凌晨3点!)并且没有提出解决方案之后,我决定使用NSDictionary,从indexPath行和部分构造密钥:

 - (void) setSelected:(NSMutableDictionary*)dict forIndexPath:(NSIndexPath*)indexPath withValue:(BOOL)selected{

            NSString *cellIdentifier = [NSString stringWithFormat:@"Cell-%i-%i", (int)indexPath.section, (int)indexPath.row];

            [dict setObject:[NSNumber numberWithBool:selected] forKey:cellIdentifier];

 }

- (BOOL) getSelected:(NSMutableDictionary*)dict forIndexPath:(NSIndexPath*)indexPath {

    NSString *cellIdentifier = [NSString stringWithFormat:@"Cell-%i-%i", (int)indexPath.section, (int)indexPath.row];
    BOOL selected=[[dict objectForKey:cellIdentifier]  boolValue];

    return selected;

}
- (BOOL) toggleSelected:(NSMutableDictionary*)dict forIndexPath:(NSIndexPath*)indexPath {

    NSString *cellIdentifier = [NSString stringWithFormat:@"Cell-%i-%i", (int)indexPath.section, (int)indexPath.row];

    BOOL selected=[[dict objectForKey:cellIdentifier]  boolValue];
    selected=!selected;

    [self setSelected:dict forIndexPath:indexPath withValue:selected];

    return selected;
}

答案 1 :(得分:0)

您可以使用可变数组来存储所选人员或索引。这将进入你的didSelectRowAtIndexPath

UITableViewCell *currentCell = [self.tableView cellForRowAtIndexPath:indexPath];
if (currentCell.accessoryType == UITableViewCellAccessoryNone) {
    currentCell.accessoryType = UITableViewCellAccessoryCheckmark;
    //save/delete your person or index in/from a global mutable array
}

在你的cellForRowATIndexPath中你可以根据数组中的whats设置附件,而不是。希望它有所帮助:)