我有一个UITableView
,每个单元格都有一个UITableViewCellAccessoryCheckmark
。用户可以根据他的偏好检查和取消选中单元格。用户可以在tableview中检查/选择多个单元格。可以取消选中已选中/已选中的单元格,并再次根据用户首选项重新检查。
我在UITableViewController
中有一个完成按钮。单击它,我需要返回到上一个视图,在此之前我必须在已检查的单元格中有一个文本集合(仅检查单元格)。
我怎么能这样做。
当我检查/选择一个单元格时,我计划通过保留NSMutableArray
并在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
上更新它来开发逻辑。但是当每次取消选中一个单元格时,我必须从数组中删除该项目,如果再次检查该单元格,那么我必须再次添加它。我认为这不是正确的方法。什么是正确的方法来做到这一点。
我在Stackoverflow中找不到类似的问题,这是非常不寻常的。如果有人可以发布链接,如果之前提出过问题,那将会很有帮助。
答案 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
提供的方法来保持布尔数组符合表内容。返回时使用数组来获取所需的文本。