将所选单元格textLabel文本存储在数组中

时间:2014-11-11 15:25:44

标签: ios objective-c uitableview parse-platform

如何将所有选定的单元格文本标签文本存储在NSMutableArray中? 当取消选择单元格时,如何从NSMutableArray中删除正确的单元格文本?

我到目前为止:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {
 static NSString *CellIdentifier = @"Cell";

 PFTableViewCell *cell = (PFTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[PFTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

 if ([self.allSelectedUsers containsObject:indexPath]) {
     [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
     NSLog(@"Yeeees");
 }else{
     [cell setAccessoryType:UITableViewCellAccessoryNone];
 }

 // Configure the cell
 cell.textLabel.text = object[@"username"];
 return cell;
}

这是我选择一个单元格的时候:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if ([self.allSelectedUsers containsObject:indexPath]) {
    [self.allSelectedUsers removeObject:indexPath];
}
else{
    [self.allSelectedUsers addObject:indexPath];
}
NSLog(@"%d", self.allSelectedUsers);
[tableView reloadData];

}

当我检查日志时,它不会显示有关单元格文本标签的任何信息。

2 个答案:

答案 0 :(得分:3)

由于我无法看到你如何获得object个实例,我建议你回到单元格并再次阅读标题。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath        
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    // Lazy initialise array
    if (!self.allSelectedUsers) {
        self.allSelectedUsers = [NSMutableArray new];
    }

    // Take action
    if ([self.allSelectedUsers containsObject:indexPath]) {
        [self.allSelectedUsers removeObject:indexPath];
    } else {
        [self.allSelectedUsers addObject:indexPath];
    }
    [tableView reloadData];

    // Logging all selected users
    for (NSIndexPath *sIndexPath in self.allSelectedUsers) {
         NSLog(@"%@", [tableView cellForRowAtIndexPath:sIndexPath].textLabel.text);
    }
}

答案 1 :(得分:2)

您目前正在存储NSIndexPath个对象,而不是NSString个对象,因此您的问题并不完全正确。使用PFTableViewController,您可以访问选择器objectAtIndexPath:

for (NSIndexPath *indexPath in self.allSelectedUsers) {
  NSLog(@"%@", [self objectAtIndexPath:indexPath][@"username"]);
}

注意:您不应该在reloadData响应者中呼叫didSelectRowAtIndexPath:;改为更改单元格的附件类型。

[[tableView cellForRowAtIndexPath:indexPath] setAccessoryType:UITableViewCellAccessoryCheckmark];

您还应该实现didDeselectRowAtIndexPath:以了解用户何时取消选择行。