在UITableView中获取已检查单元格中的值

时间:2013-04-07 06:43:25

标签: iphone ios uitableview

我有一个UITableView,每个单元格都有一个UITableViewCellAccessoryCheckmark。用户可以根据他的偏好检查和取消选中单元格。用户可以在tableview中检查/选择多个单元格。可以取消选中已选中/已选中的单元格,并再次根据用户首选项重新检查。 我在UITableViewController中有一个完成按钮。单击它,我需要返回到上一个视图,在此之前我必须在已检查的单元格中有一个文本集合(仅检查单元格)。 我怎么能这样做。

当我检查/选择一个单元格时,我计划通过保留NSMutableArray并在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath上更新它来开发逻辑。但是当每次取消选中一个单元格时,我必须从数组中删除该项目,如果再次检查该单元格,那么我必须再次添加它。我认为这不是正确的方法。什么是正确的方法来做到这一点。 我在Stackoverflow中找不到类似的问题,这是非常不寻常的。如果有人可以发布链接,如果之前提出过问题,那将会很有帮助。

2 个答案:

答案 0 :(得分:7)

维护两个数组,如下所示:

@property (nonatomic, retain) NSMutableArray *features, *selectedFeature;

.m文件中合成它们。在viewDidLoad

中初始化两个数组
self.features = [NSArray arrayWithMyOwnResourceLikeDownloadedFromServerOrWhatever];
self.selectedFeature = [NSMutableArray array];

然后在didSelectRowAtIndex中执行以下操作:

NSString * stirng = [features objectAtIndex:indexPath.row];
if ([self.selectedFeature containsObject:stirng]) {
    [self.selectedFeature removeObject:stirng];
}
else{
   [self.selectedFeature addObject:stirng];
}

和您的cellForRowAtIndexPath

NSString * stirng = [features objectAtIndex:indexPath.row];
[cell.textLabel setText:stirng];
if ([self.selectedFeature containsObject:stirng]) {
   //it is selected feature
   [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
}
else{
   //it is un-selected feature
   [cell setAccessoryType:UITableViewCellAccessoryNone];
}

答案 1 :(得分:0)

创建一个与可检查单元格数相同长度的布尔数组,并更新单击事件的值。如果表内容是动态的,您可以使用NSMutabeArray提供的方法来保持布尔数组符合表内容。返回时使用数组来获取所需的文本。